动态规划-最大子矩阵和(ZOJ 1074 TO THE MAX )
来源:互联网 发布:脑图软件 mac 编辑:程序博客网 时间:2024/06/02 06:36
题目:
有一个包含正数和负数的二维数组。一个子矩阵是指在该二维数组里,任意相邻的下标是1×1或更大的子数组。一个子矩阵的和是指该子矩阵中所有元素的和。
本题中,把具有最大和的子矩阵称为最大子矩阵。例如,如下数组的最大子矩阵位于左下角,其和为15。
输入
是N×N个整数的数组。第一行是一个正整数N,表示二维方阵的大小。接下来是N2个整数(由空格和换行隔开)。该数组的N2个整数,是以行序给出的。先是第一行的数,由左到右;然后是第二的数,由左到右,等等。N可能达到100,数组元素的范围是[-127,127]。
输出:
输出是最大子矩阵的和。
思路:
1、此问题是“最大字段和”问题的推广。
2、代码具体过程如下:
代码:
#include<cstdio>#include<cstring>int n;int a[110][110];int b[110];int main(){ while(scanf("%d",&n)!=EOF) { for(int i=0; i<n; i++) for(int j=0; j<n; j++) scanf("%d",&a[i][j]); int Max = -32767; for(int i=0; i<n; i++) { //数组b表示i~j行,对应列元素的和 //将二维动态规划问题转化为一维动态规划问题 memset(b, 0, sizeof(b)); for(int j=i; j<n; j++) { //下面是针对数组b求最大子段和的动态规划算法 int sum=0; for(int k=0; k<n; k++) { b[k] += a[j][k]; sum += b[k]; if(sum<0) sum = b[k]; if(sum>Max) Max = sum; } } } printf("%d\n",Max); } return 0;}
3 0
- 动态规划-最大子矩阵和(ZOJ 1074 TO THE MAX )
- 【POJ1050】To the Max (动态规划、最大字串和、最大子矩阵和)||NYOJ44 ||NYOJ104
- POJ 1050 To the Max (动态规划——求最大子矩阵和)
- POJ 1050 To the Max(动态规划、最大子矩阵和)
- hdu1081 To The Max(动态规划-最大子矩阵)
- hdu1081 To The Max 【动态规划】【最大子矩阵】
- hdu 1081 To The Max最大矩阵和(动态规划)
- 动态规划(DP)——HDU1081、PKU1050 To The Max 最大子矩阵问题
- ZOJ 1074/POJ 1050 To the Max (最大子矩阵和)
- TOJ 2010 ZOJ 1074 HDU1081 To The Max /最大子矩阵和
- ZOJ 1074 To the Max【DP】【最大子段和】
- poj 1050 To the Max(动态规划处理二维最大子段和)
- POJ 1050 To the Max(动态规划-最大子段和)
- 最大子矩阵和(To The Max)
- HDU 1081 To The Max(最大子矩阵和)
- poj 1050 To the Max(最大子矩阵和)
- hdu 1081 To The Max(子矩阵最大和)
- hdu 1081 To The Max(最大子矩阵和)
- 同步和异步消息机制
- GPS坐标转百度坐标(超准)
- NAS 服务器的开关机顺序及使用
- 安装 node
- 第十二周项目一复数类中的运算符重载一
- 动态规划-最大子矩阵和(ZOJ 1074 TO THE MAX )
- java反射机制浅析。
- MVC 结构的框架都有一个共同的模式
- CSS学习(一)
- 创建 nodejs HTTP服务器
- ios 自定义cell cellForRowAtIndexPath中的写法
- Difference between 2>&-, 2>/dev/null, |&, &>/dev/null and >/dev/null 2>&1
- SQL知识整理一:触发器、存储过程、变量表、临时表
- Leetcode 144