Description
给出一个m×n的矩阵,请输出它的最大子矩阵和。
Input
多测试用例,每个测试用例:
第一行是两个正整数m和n,表示该矩阵的行数和列数。1 < m, n < 400
接下来m行,每行n个整数,空格分隔。
Output
每个测试用例输出一行:该矩阵的最大子矩阵和。运算结果在int范围内。
Sample Input
4 4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
Sample Output
15
代码入下:
#include<bits/stdc++.h>
using namespace std;
int a[410][410];
void demo(int m,int n);
int main(){
int m,n,temp;
while(scanf("%d%d",&m,&n)!=EOF){
memset(a,0,sizeof(a));
for(int i=1;i<=m;i++){ //存数
for(int j=1;j<=n;j++){
scanf("%d",&temp);
a[i][j]=a[i-1][j]+temp; //每一个数是对应目前列的总和
}
}
demo(m,n);
}
return 0;
}
void demo(int m,int n){
int result=0;//记录结果
for(int i=1;i<=m;i++){ //记录行i~行j之间的矩阵总和
for(int j=i;j<=m;j++){
int res=0;
for(int z=1;z<=n;z++){
res=res+(a[j][z]-a[i-1][z]);
if(res<0){
res=0;
}
if(result<res){
result=res;
}
}
}
}
printf("%d\n",result);
}