以前写过这篇的博。。
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; }