最大字段和的扩展。程序中遍历每两行,用sum数组记录每一列的和,这相当于把二维数组压缩为一维数组,然后计算sum的最大字段和。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int sum[120];
int DP(int n[],int m)
{
int i,f[120];
int max=-200000000;
for(i=2,f[1]=n[1];i<=m;i++)
{
if(f[i-1]>0)
{
f[i]=f[i-1]+n[i];
}
else
{
f[i]=n[i];
}
if(f[i]>max) max=f[i];
}
return max;
}
int main()
{
int i,j,k,w;
int n;
int num[120][120];
int max=-2000000;
int x;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&num[i][j]);
}
}
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]=sum[k]+num[j][k];
}
x=DP(sum,n);
if(x>max)
max=x;
}
}
printf("%d\n",max);
return 0;
}
本文介绍了一种方法,通过遍历二维数组的每两行,利用一维数组记录每列和来计算最大字段和。
374

被折叠的 条评论
为什么被折叠?



