以前写过这篇的博。。
http://blog.csdn.net/u011262722/article/details/10061865
求最大子矩阵和,关键在于矩阵预处理。
然后就是 要注意比较的顺序= =。这次又弱弱地被坑!
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int a[110][110];
int main()
{
int n,tmp;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&tmp);
a[i][j]=a[i][j-1]+tmp;
}
}
int maxsum=-0xffffff,sum;
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
sum=0;
for(int k=1;k<=n;k++)
{
sum+=(a[k][j]-a[k][i-1]);
if(sum<0) sum=0;
if(sum>maxsum)
maxsum=sum;
}
}
}
printf("%d\n",maxsum);
}
return 0;
}
原文:http://blog.csdn.net/u012841845/article/details/18400575