经典DP
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int DP(int a[], int n)
{
int i, f[101];
int max = -200000000;
for(i=2,f[1]=a[1]; i<=n; i++)
{
if(f[i-1]>0)
f[i] = f[i-1] + a[i];
else
f[i] = a[i];
if(f[i]>max)
max = f[i];
}
return max;
}
int main()
{
int n, i, he, j;
int a[105][105], k;
int sum[105], max;
scanf("%d",&n);
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
scanf("%d",&a[i][j]);
max = -200000000;
for(i=1; i<=n; i++)
{
memset(sum, 0, sizeof(sum));
for(j=i; j<=n; j++)
{
for(k=1; k<=n; k++)
sum[k]+=a[j][k];
he = DP(sum, n);
if(he>max) max=he;
}
}
printf("%d\n",max);
return 0;
}