poj1050 To the Max (dp)
来源:互联网 发布:微博和淘宝怎么解绑 编辑:程序博客网 时间:2024/04/27 22:52
题意:求一个n*n矩阵的子矩阵,使得这个子矩阵中的数字之和最大。
(1)首先考虑一个整数列,dp[ i ]表示以第 i 个 整数结尾的一列连续整数获得的最大值,那么,显然,第 i-1 个数是否在这列数中,只需判断以第 i-1 个数结尾的一列连续的数最大值是否大于0,即 dp[ i ] = MAX(dp[ i ], 0)+a[ i ], a[ i ]为第 i 个数的值。
然后对于这个矩阵,则将其压缩。
(2)从矩阵第一列开始,先将第一列进行上述的 dp 操作,记录其中获得的最大值 max;再将第一列和第二列的数相加,对新得到的一列数进行上述dp操作,记录期间的最大值,并用这个最大值与之前的max比较,更新max,如此反复,直到前n列全都相加。
(3)再从矩阵第二列开始,进行(2)操作。之后从第三列、第四列开始、..... 、直到第n列。
#include <iostream>using namespace std;#define N 100int a[N][N], sum[N], n;int main(){ int i, j, k;scanf("%d", &n); for(i = 0; i < n; i++){for(j = 0; j < n; j++)scanf(" \n%d", &a[i][j]);}int ans = -1000000, dp;for(i = 0; i < n; i++){memset(sum, 0, sizeof(sum));for(j = i; j < n; j++){ for(k = 0; k < n; k++) sum[k] += a[j][k]; dp = 0;for(k = 0; k < n; k++){dp = dp+sum[k] > sum[k] ? dp+sum[k] : sum[k];if(dp > ans) ans = dp;}}}printf("%d\n", ans);return 0;}
- DP::Poj1050 To the max
- poj1050 To the Max (dp)
- POJ1050 TO THE MAX [DP]
- poj1050 to the max (DP)
- poj1050 To the Max dp
- poj1050 To the Max dp
- POJ1050 ZOJ 1074 To the Max DP
- poj1050 To the Max 暴力DP
- POJ1050 To the Max
- POJ1050 To the Max
- POJ1050 To the Max
- poj1050 to the max
- poj1050 To the Max
- poj1050 To the Max
- POJ1050--To the Max
- POJ1050 To the Max
- poj1050 To the Max
- poj1050:to the max
- IPhone CGPathDrawingMode 模式详解
- DevExpress 给TreeList添加右键菜单
- (24)ServletConfig和ServletContext
- Index的几种访问方式
- 温故知新 javascript 正则表达式
- poj1050 To the Max (dp)
- C语言可变参数研究
- 中国人的创新能力是怎么被扼杀的
- Servlet
- CentOS 6 安装后基本配置
- Servlet的一些细节
- 一个超超超烂SQL的优化
- 【产品经理之一】产品经理在企业中的扮演的角色和运作情况
- 【Untiy3D 游戏开发之一】Unity3D For Mac最新3.4.1版本破解教程分享并将Unity3D项目在iphone上运行;