最大子矩阵和:把它划归到最大子序列和 ;)
/*
* POJ-1050 to the max
* mike-w
* 2011-10-23
* ------------------------
* 最大子矩阵和,化归到最大子序列和
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 111
#define INF 9999
int N;
int matrix[SIZE][SIZE];
int buf[SIZE];
int opt[SIZE];
int calc(int start, int end)
{
int i,j,max;
for(i=0;i<N;i++)
for(j=start,buf[i]=0;j<=end;j++)
buf[i]+=matrix[j][i];
opt[0]=buf[0];
for(i=1;i<N;i++)
if(buf[i]+opt[i-1]>buf[i])
opt[i]=buf[i]+opt[i-1];
else
opt[i]=buf[i];
max=opt[0];
for(i=0;i<N;i++)
if(opt[i]>max)
max=opt[i];
return max;
}
int main(void)
{
int i,j,max,t;
#ifndef ONLINE_JUDGE
freopen("t.in","r",stdin);
#endif
scanf("%d",&N);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",matrix[i]+j);
max=-INF;
for(i=0;i<N;i++)
for(j=i;j<N;j++)
if((t=calc(i,j))>max)
max=t;
printf("%d\n",max);
return 0;
}