POJ 1050 二维动态规划转变成枚举加一维的动态规划!
2015-04-20 19:26
405 查看
#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <climits> #include <cstring> #include <cmath> #include <map> #include <set> using namespace std; int n; int a[105][105]; int dp[105][105]; int sum[105][105]; int main(){ while(scanf("%d",&n)!=EOF){ for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ scanf("%d",&a[i][j]); } } memset(dp,0,sizeof(dp)); for(int j = 1;j <= n;j++){ // j列的前缀和 for(int i = 1;i <= n;i++){ sum[j][i] = sum[j][i-1] + a[i][j]; } } for(int i = 1;i <= n;i++){ for(int j = i;j <= n;j++){ int right = 0; for(int k = 1;k <= n;k++){ if(right >= 0){ right += sum[k][j] - sum[k][i-1]; } else{ right = sum[k][j] - sum[k][i-1]; } dp[i][j] = max(dp[i][j],right); } } } int ans = -INT_MAX; for(int i = 1;i <= n;i++){ for(int j = i;j <= n;j++){ if(dp[i][j] > ans){ ans = dp[i][j]; } } } cout << ans << endl; } return 0; }
相关文章推荐
- [ACM_动态规划] POJ 1050 To the Max ( 动态规划 二维 最大连续和 最大子矩阵)
- 动态规划之划分动态规划:矩阵链乘 poj 1651 Multiplication Puzzle
- poj 1050动态规划+最大子矩阵和+二维化为一维来求最大子串和值
- POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心)-动态规划做法
- POJ1050 To the Max 简单动态规划
- 动态规划专题:POJ 动态规划题目列表
- poj 1050 To the Max(动态规划处理二维最大子段和)
- 动态规划 poj1050
- CUGB 1050 题解动态规划简单题,这是我学会动态规划后做的第三道题比起前两道明显要顺手的多!秩序套用一下代码末班就行了。
- poj 1160 Post Office(动态规划:较难)
- [POJ 2923] Relocation (动态规划 状态压缩)
- poj 1179 Polygon(动态规划:矩阵连乘加强)
- POJ-1664 放苹果 动态规划思想解组合数学
- 动态规划第三讲——序列化的动态规划问题
- poj 1050 求子矩阵之和 动态规划
- PKU2948 Martian Mining - 二维动态规划
- POJ 1050 To the Max -- 动态规划
- 动态规划 POJ 1088 滑雪
- POJ - 1125 Stockbroker Grapevine (动态规划理解floyd)
- 72. Edit Distance(动态规划中二维降一维)