AC代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=500+5; int a[maxn][maxn]; int ans[maxn]; int n,m; int Max1(){ int tol=0; int mx=ans[0]; for(int i=0;i<m;i++){ tol+=ans[i]; if(tol>mx) mx=tol; if(tol<0){ tol=0; } } return mx; } int main(){ while(scanf("%d%d",&n,&m)==2){ for(int i=0;i<n;i++) for(int j=0;j<m;j++) scanf("%d",&a[i][j]); int MaxSum=a[0][0]; //初始值不能设置为0,因为可能为负 for(int i=0;i<n;i++){ memset(ans,0,sizeof(ans)); for(int j=i;j<n;j++){ for(int k=0;k<m;k++){ ans[k]+=a[j][k]; } int tmp=Max1(); if(tmp>MaxSum)MaxSum=tmp; } } printf("%d\n",MaxSum); } return 0; }
做了这道题只想说一句:革命尚未成功,同志还需努力!!!