UVA_108

为了充分利用计算过的结果,我们可以先枚举矩形左上顶点的位置,再枚举矩形的大小。

同时,在计算矩形的元素和时,也要充分利用子矩形的元素和。

#include<stdio.h>
#include<string.h>
int a[110][110],b[110],c[110];
int main()
{
int i,j,k,n,x,y,ans;
while(scanf("%d",&n)==1)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
ans=-1000000000;
for(x=0;x<n;x++)
for(y=0;y<n;y++)
{
for(k=0;k+x<n;k++)
b[k]=0;
for(j=0;y+j<n;j++)
for(i=0;x+i<n;i++)
{
c[i]=a[x+i][y+j];
if(i)
c[i]+=c[i-1];
b[i]+=c[i];
if(b[i]>ans)
ans=b[i];
}
}
printf("%d\n",ans);
}
return 0;
}



posted on 2011-09-23 01:41  Staginner  阅读(344)  评论(0编辑  收藏  举报