动态规划-最大子矩阵
2017-04-16 19:41
183 查看
描述
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。
比如,如下4 * 4的矩阵
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
的最大子矩阵是
9 2
-4 1
-1 8
这个子矩阵的大小是15。
输入
输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127, 127]。
输出
输出最大子矩阵的大小。
样例输入
样例输出
15
一般的做法依然是枚举:枚举子矩阵最上和最下的行以及最左和最右的列,但仅是这样就已经是O(N^4) 的复杂度了。对于N <= 100 以及1s 的时限来说,这样的做法是不能够接受的。
如何根据子矩阵的特性来解决此题?
正确解法:每次枚举子矩阵最上的行u 和最下的行 d,再把这个子矩阵每一列的值相加,压缩成一个一维的数组,对这个数组求其最大子段和,这样就相当于把所有最上的行为u 并且最下的行为 d 的最大子矩阵和求出来了。
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。
比如,如下4 * 4的矩阵
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
的最大子矩阵是
9 2
-4 1
-1 8
这个子矩阵的大小是15。
输入
输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127, 127]。
输出
输出最大子矩阵的大小。
样例输入
4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
样例输出
15
一般的做法依然是枚举:枚举子矩阵最上和最下的行以及最左和最右的列,但仅是这样就已经是O(N^4) 的复杂度了。对于N <= 100 以及1s 的时限来说,这样的做法是不能够接受的。
如何根据子矩阵的特性来解决此题?
正确解法:每次枚举子矩阵最上的行u 和最下的行 d,再把这个子矩阵每一列的值相加,压缩成一个一维的数组,对这个数组求其最大子段和,这样就相当于把所有最上的行为u 并且最下的行为 d 的最大子矩阵和求出来了。
下面是我的ac代码:
#include<iostream> using namespace std; #define N 103 int fun(int b[N],int n) { int i,max,c; c=0; max=0; for(i=1;i<=n;i++) { if(c>0)c=c+b[i]; else c=b[i]; if(max<c)max=c; } return max; } int main() { int i,j,n,max,sum,k; int a[N][N],b[N]; cin>>n; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cin>>a[i][j]; } } max=0; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { b[j]=0; } for(j=i;j<=n;j++) { for(k=1;k<=n;k++) { b[k]+=a[j][k]; } sum=fun(b,n); if(max<sum)max=sum; } } cout<<max; return 0; }
相关文章推荐
- 动态规划——最大子矩阵和 收藏
- BZOJ_1084_[SCOI2005]_最大子矩阵_(动态规划)
- 【动态规划】求二维矩阵的最大和子矩阵
- 动态规划(DP)——HDU1081、PKU1050 To The Max 最大子矩阵问题
- POJ 1050 求最大子矩阵和 动态规划
- 笔试面试算法经典--动态规划-最大子矩阵和(Java)
- 动态规划练习-2(最大子矩阵)
- [ACM_动态规划] POJ 1050 To the Max ( 动态规划 二维 最大连续和 最大子矩阵)
- 【POJ1050】To the Max (动态规划、最大字串和、最大子矩阵和)||NYOJ44 ||NYOJ104
- HDU 2870(动态规划-最大子矩阵)
- poj 1050动态规划+最大子矩阵和+二维化为一维来求最大子串和值
- 【动态规划】最大子矩阵
- [动态规划]最大子序列+最大子矩阵
- 动态规划 最大子矩阵的和
- 动态规划_题目1139:最大子矩阵
- 动态规划练习一 02:最大子矩阵
- 51nod 最大子矩阵和(动态规划)
- |NOIOJ|动态规划|1768:最大子矩阵
- 1084: [SCOI2005]最大子矩阵 (动态规划)
- 动态规划最大子矩阵