说起来这道题,就是把二维的数组化成一维的来计算……
#include<stdio.h>
int main()
{
int a[102][102];
int s[102][102];
int n;
int i, j, k;
int m, temp;
int max=-1000000;
scanf("%d", &n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%d", &a[i][j]);
s[i][j]=s[i-1][j]+a[i][j];//求出第j列0-i行的和s[i][j]
}
}
for(i=0; i<n; i++)
{
for(j=i; j<n; j++)
{
m=0;
for(k=0; k<n; k++)//以下几行为一维时的算法;求出第i行到第j行的最大子序列和
{
temp=s[j][k]-s[i][k];
m+=temp;
if( m<temp)
m=temp;
if(max<m)//记录过程中的最大值
max=m;
}
}
}
printf("%d\n", max);
}