POJ 1179
传送口
“多边形游戏”是一款单人益智游戏。

游戏开始时,给定玩家一个具有N个顶点N条边(编号1-N)的多边形,如图1所示,其中N = 4。

每个顶点上写有一个整数,每个边上标有一个运算符+(加号)或运算符*(乘号)。

第一步,玩家选择一条边,将它删除。

接下来在进行N-1步,在每一步中,玩家选择一条边,把这条边以及该边连接的两个顶点用一个新的顶点代替,新顶点上的整数值等于删去的两个顶点上的数按照删去的边上标有的符号进行计算得到的结果。

下面是用图1给出的四边形进行游戏的全过程。

1179_2.jpg

最终,游戏仅剩一个顶点,顶点上的数值就是玩家的得分,上图玩家得分为0。

请计算对于给定的N边形,玩家最高能获得多少分,以及第一步有哪些策略可以使玩家获得最高得分。

输入格式
输入包含两行,第一行为整数N。

第二行用来描述多边形所有边上的符号以及所有顶点上的整数,从编号为1的边开始,边、点、边…按顺序描述。

其中描述顶点即为输入顶点上的整数,描述边即为输入边上的符号,其中加号用“t”表示,乘号用“x”表示。

输出格式
输出包含两行,第一行输出最高分数。

在第二行,将满足得到最高分数的情况下,所有的可以在第一步删除的边的编号从小到大输出,数据之间用空格隔开。

数据范围
3≤N≤50,
数据保证无论玩家如何操作,顶点上的数值均在[-32768,32767]之内。

输入样例:
4
t -7 t 4 x 2 x 5
输出样例:
33
1 2
ac代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<string.h>
#define ll long long
using namespace std;
int dplow[105][105];
int dpbig[105][105];
int a[55];
char s[105];
const int inf = 0x3f3f3f;
void maxdp(int l, int k, int r)
{if (s[k + 1] == 't')dpbig[l][r] = max(dpbig[l][r], dpbig[l][k] + dpbig[k + 1][r]);elsedpbig[l][r] = max(dpbig[l][r],max(dpbig[l][k] * dpbig[k + 1][r], max(dplow[l][k] * dpbig[k + 1][r], max(dpbig[l][k] * dplow[k + 1][r], dplow[l][k] * dplow[k + 1][r]))));
}
void mindp(int l, int k, int r)
{if (s[k + 1] == 't')dplow[l][r] = min(dplow[l][r], dplow[l][k] + dplow[k + 1][r]);elsedplow[l][r] = min(dplow[l][r], min(dpbig[l][k] * dplow[k + 1][r], min(dplow[l][k] * dpbig[k + 1][r], min(dplow[l][k] * dplow[k + 1][r], dpbig[l][k] * dpbig[k + 1][r]))));
}
int main()
{int n;scanf("%d", &n);memset(dplow, inf, sizeof(dplow));memset(dpbig, -inf, sizeof(dpbig));char g;for (int i = 1; i <= 2 * n; i++){if (i % 2 == 1)cin>>g, s[i / 2 + n + 1] = s[i / 2 + 1] = g;else scanf("%d", &dplow[i / 2][i / 2]),dpbig[i / 2 + n][i / 2 + n] = dpbig[i / 2][i / 2] = dplow[i / 2 + n][i / 2 + n] = dplow[i / 2][i / 2];}for (int len = 2; len <= n; len++){for (int l = 1; l <= 2 * n - len + 1; l++){int r = l + len - 1;for (int k = l; k < r; k++){maxdp(l, k, r);mindp(l, k, r);}}}int ans = -0x3f3f3f;for (int i = 1; i <= n; i++){ans = max(ans, dpbig[i][i + n - 1]);}printf("%d\n", ans);int bug = 0;for (int i = 1; i <= n; i++){if (ans == dpbig[i][i + n - 1]){if (bug == 0)printf("%d", i);elseprintf(" %d", i);bug++;}}printf("\n");
}

POJ - 1179相关推荐

  1. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  2. (精)【ACM刷题之路】POJ题目详细多角度分类及推荐题目

    POJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: ...

  3. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  4. poj题目详细分类及算法推荐题目

    DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题  ...

  5. ACM POJ 题目分类(完整整理版本)

    DP: 1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题   ...

  6. POJ ZOJ题目分类

    POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...

  7. POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)

    水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法:        (1)枚举 (1753,2965)       (2)贪心(13 ...

  8. NOIP 好题推荐(DP+搜索+图论)POJ ZOJ

    NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS)  1090 Chain ->格雷码和二进制码 ...

  9. POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)

    本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...

  10. hdu与poj题目分类

    POJ 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(po ...

最新文章

  1. 138.ssm 框架下 导出Excel
  2. 改正错误:tensorflow.python.framework.errors_impl.NotFoundError: FindFirstFile failed for: ...
  3. c 语言26个小写字母,26个字母表大小写
  4. python自动化测试脚本后端_基于 python 的接口自动化测试
  5. SpringMVC中注解@RequestBody和@ResponseBody的使用区别
  6. 基本法求解位示图编号问题
  7. RocketMQ消息消费之长轮询
  8. 揭密 Vue 的双向绑定
  9. 在java中调用python方法
  10. 【元胞自动机】基于matlab元胞自动机双边教室疏散【含Matlab源码 1208期】
  11. kubectl 获取不到node_排查 Node.js 服务内存泄漏,没想到竟是它?
  12. Qpython实现命令行的贪吃蛇
  13. android gps转换度分秒,GPS坐标单位(度分秒)的换算方法
  14. 如何在直播、会议、视频中使用虚拟形象
  15. 批量重命名图片,去除括号
  16. 中国大学排行榜网站的爬取
  17. java用socket解析16进制数据_浅析Java基于Socket的文件传输案例
  18. [附源码]JAVA+ssm计算机毕业设计房屋租赁管理系统(程序+Lw)
  19. Excel计算相邻单元格时间差,如果时间差大于24h编号自增
  20. Element-ui 日期选择器切换类型(type)

热门文章

  1. 幼儿园清明节活动设计方案
  2. 1_科普—什么是GNU?什么是GPL协议?GNU和Linux是怎么结合在一起的?
  3. GNU Make构建工具使用教程
  4. 高薪岗位云计算面试题,云计算运维工程师必备
  5. 做一个略调皮的个人博客--菜单篇
  6. 读书笔记:时间与精力管理:拖延症与六种效应
  7. 我读股票大作手回忆录摘录篇
  8. java 刽子手图像代码_刽子手游戏
  9. [转]Selenium html之于ul标志代码分析与使用
  10. 带你深入理解矩阵乘法