算法丑陋,时间略长,还望指教。
#include <stdio.h>
#include <stdlib.h>
int size;
int matrix[100][100];
int maxf(int a,int b)
{
return a>b?a:b;
}
int count_line(int*line)
{
int d[size],i,max=-10000;
d[0]=line[0];
for(i=1;i<size;i++)
d[i]=maxf(d[i-1]+line[i],line[i]);
for(i=0;i<size;i++)
(d[i]>max)?(max=d[i]):(max=max);
return max;
}
int main()
{
scanf("%d",&size);
int i,j,max=-10000,k,test[size];
for(i=0;i<size;i++)
for(j=0;j<size;j++)
scanf("%d",&matrix[i][j]);
for(i=1;i<size;i++)
for(j=0;j<size;j++)
matrix[i][j]+=matrix[i-1][j];
for(i=0;i<size;i++)
{
for(j=i;j<size;j++)
{
for(k=0;k<size;k++)
test[k]=matrix[j][k]-matrix[i][k];
(count_line(test)>max)?(max=count_line(test)):(max=max);
}
}
printf("%d",max);
return 0;
}