CDOJ 1131 男神的礼物 石子合并
2016-04-01 12:42
211 查看
代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <string> using namespace std; int dp[100][100][2]; void max(int a, int b); int main() { int T, n, a; scanf("%d", &T); while (T--) { memset(dp, -1, sizeof(dp)); scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a); dp[i][i][0] = a; dp[i][i][1] = 0; } for (int r = 1; r < n; r++) { for (int l = r - 1; l >= 0; l--) { for (int k = l; k < r; k++) { if (dp[l][r][1] == -1) { dp[l][r][1] = dp[l][k][0] * dp[k + 1][r][0] + dp[l][k][1] + dp[k + 1][r][1]; dp[l][r][0] = (dp[l][k][0] + dp[k + 1][r][0]) % 100; } else if (dp[l][r][1] > (dp[l][k][0] * dp[k + 1][r][0] + dp[l][k][1] + dp[k + 1][r][1])) { dp[l][r][1] = dp[l][k][0] * dp[k + 1][r][0] + dp[l][k][1] + dp[k + 1][r][1]; dp[l][r][0] = (dp[l][k][0] + dp[k + 1][r][0]) % 100; } else if (dp[l][r][1] == (dp[l][k][0] * dp[k + 1][r][0] + dp[l][k][1] + dp[k + 1][r][1])) { if (dp[l][r][0] > ((dp[l][k][0] + dp[k + 1][r][0]) % 100)) { dp[l][r][0] = (dp[l][k][0] + dp[k + 1][r][0]) % 100; } } } } } printf("%d\n", dp[0][n - 1][1]); } return 0; }
相关文章推荐
- js产生随机数
- POJ1330Nearest Common Ancestors——近期公共祖先(离线Tarjan)
- 怎样写出无法维护的代码
- 浅谈Python装饰器
- C++之类型转换
- iOS之键盘弹出视图上移
- 移动构造-C++11
- Linux_ select demo
- Git服务器搭建
- 算法训练 区间k大数查询
- JAVA·多线程:线程优先级
- join 、left join 的区别
- 水质中的PH值、TDS值、KH值、GH值分别是什么意思
- leetcode 34. Search for a Range
- UnCaught TypeError:date.getFullYear is not a function解决方案
- Android性能优化之SparseArray与ArrayMap
- iOS 中 pch文件的使用
- FIB
- 作业1
- Linux系统监控脚本实战