poj 1179 Polygon
2015-06-25 23:57
579 查看
利用dp解决问题,除了dp中的首位的状态,每种中间的状态有对应两种情况:相邻元素相加或者相邻元素相乘。操作过程中,额外的数组记录中间过程步骤。
#include<iostream> #include<string.h> #include<math.h> #include<fstream> #include<algorithm> #include<stdio.h> #include<queue> #include<vector> #define MAXSIZE 100 using namespace std; int tnum[110], num[55]; char tsym[110], sym[55]; int dmax[55][55], dmin[55][55]; const int mi = 1993111700; inline int calc (int a, int b, char sy) { if (sy == 't') return a + b; else return a * b; } int main () { //freopen("data_1179.txt","r",stdin); int n; char ar[5]; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%s", ar); tsym[i] = tsym[i + n] = ar[0]; int x; scanf("%d", &x); tnum[i] = tnum[i + n] = x; } int res = -mi, ans[55], ansmr = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) num[j] = tnum[i + j]; for (int j = 0; j < n - 1; j++) sym[j] = tsym[i + j + 1]; for (int j = 0; j < n; j++) dmax[j][j] = dmin[j][j] = num[j]; for (int len = 2; len <= n; len++) { for (int j = 0; j + len <= n; j++) { int k = j + len - 1; dmax[j][k] = -mi, dmin[j][k] = mi; for (int u = j; u < k; u++) { dmax[j][k] = max(dmax[j][k], calc(dmax[j][u], dmax[u + 1][k], sym[u])); dmax[j][k] = max(dmax[j][k], calc(dmin[j][u], dmax[u + 1][k], sym[u])); dmax[j][k] = max(dmax[j][k], calc(dmax[j][u], dmin[u + 1][k], sym[u])); dmax[j][k] = max(dmax[j][k], calc(dmin[j][u], dmin[u + 1][k], sym[u])); dmin[j][k] = min(dmin[j][k], calc(dmax[j][u], dmax[u + 1][k], sym[u])); dmin[j][k] = min(dmin[j][k], calc(dmin[j][u], dmax[u + 1][k], sym[u])); dmin[j][k] = min(dmin[j][k], calc(dmax[j][u], dmin[u + 1][k], sym[u])); dmin[j][k] = min(dmin[j][k], calc(dmin[j][u], dmin[u + 1][k], sym[u])); } } } if (dmax[0][n - 1] > res) res = dmax[0][n - 1], ans[0] = i, ansmr = 1; else if (dmax[0][n - 1] == res) ans[ansmr++] = i; } printf("%d\n%d", res, ans[0] + 1); for (int i = 1; i < ansmr; i++) printf(" %d", ans[i] + 1); printf("\n"); return 0; }
相关文章推荐
- Django 后台表单标签的自定义
- Django model字段类型清单
- Django模块笔记【一】
- 求LR(0)文法的规范族集和ACTION表、GOTO表的构造算法
- 北大百炼1003 Hangover 题解
- TEA -- Tiny Encryption Algorithm
- Algorithm --> n位数去掉k位后找最小数
- Algorithm --> 顺序打印矩阵
- Google推荐的图片加载库Glide介绍
- Google Chrome 应用商店上传扩展程序
- Google Interview - 判断点是否在凸多边形内的O(logn)解法
- 使用Cargo实现自动化部署
- Django入门笔记【六】
- Django入门笔记【五】
- Golang import 导入包的语法
- django使用group by
- 时间区间的操作:mongoose的aggregate无法match,但是find却可以找到。(非ObjecetID)
- Algorithms—77.Combinations
- EGOTableViewPullRefresh实现下拉刷新
- django+uwsgi报错libgcc_s.so.1 must be installed for pthread_cancel to work