《动态规划》hdoj 1081 二维最大子段和

map[i][j]记录第i行前j个数之和

#include<stdio.h>

int map[105][105];
int main()
{
    int n,i,j,t,k;
    while(scanf("%d",&n)!=EOF)
    {
        memset(map,0,sizeof(map));
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            {
                scanf("%d",&t);
                map[i][j]+=map[i][j-1]+t;
            }
        int max=-10000000;
        for(i=1;i<=n;i++)
            for(j=i;j<=n;j++)
            {
                int sum=0;
                for(k=1;k<=n;k++)
                {
                    if(sum<0)
                        sum=0;
                    sum+=map[k][j]-map[k][i-1];
                    if(sum>max)
                        max=sum;
                }
            }
        printf("%d\n",max);
    }
}

你可能感兴趣的:(《动态规划》hdoj 1081 二维最大子段和)