题目连接http://poj.org/problem?id=1050
#include<cstdio>
#include<cstring>
using namespace std;
#define inf 0x3f3f3f3f
int dp[101][101];
int main()
{
int n;
int m;
scanf("%d",&n);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&m);
dp[i][j]=dp[i-1][j]+m;
}
int maxn=-inf;
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
int sum=0;
for(int k=1;k<=n;k++)
{
int t=dp[j][k]-dp[i-1][k];
sum+=t;
if(sum<0) //当前和为负数就从下一个数重新计算
sum=0;
if(sum>maxn)
maxn=sum;
}
}
}
printf("%d\n",maxn);
return 0;
}