hdu1081 最大子矩阵

 

最大子矩阵和最大连续子序列十分类似。

对于矩阵,可以将他的一列相加,然后成为一行,就是最大连续子序列了。

#include<stdio.h>
#include<string.h>
#define maxn 105
int map[maxn][maxn],f[maxn];
int max(int x,int y)
{
    return x>y?x:y;
}
int Get_max(int n)
{
    int i,j;
    int ans=-99999999,ret=0;
    for(i=1;i<=n;i++)
    {
        if(ret>0)
        {
            ret+=f[i];
        }
        else
        {
            ret=f[i];
        }
        ans=max(ret,ans);
    }
    return ans;
}
int main()
{
    int i,j,n,ret;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                scanf("%d",&map[i][j]);
        ret=-99999999;
        for(i=1;i<=n;i++)
        {
            memset(f,0,sizeof(f));
            for(j=i;j<=n;j++)
            {
                for(int k=1;k<=n;k++)
                {
                    f[k]+=map[j][k];
                }
                int ans=Get_max(n);
                if(ans>ret)
                    ret=ans;
            }
        }
        printf("%d\n",ret);
    }
}

 

posted @ 2015-08-30 14:11  sweat123  阅读(157)  评论(0编辑  收藏  举报