• scau实验题 9491 最大子矩阵和


    裸题,最大子矩阵和,将二维压缩为一维,以行为准,每次枚举一行的和(从i列到j列的和),再对行进行最大子序列和DP求解,时间复杂度为O(N^3)

    #include <stdio.h>
    #include <string.h>
    #define INF -1000000000
    #define N 110
    int a[N][N];
    int sum[N];
    int n;
    
    void input()
    {
        int i,j;
        scanf("%d",&n);
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                scanf("%d",&a[i][j]);
        return ;
    }
    void get_sum(int i , int j)
    {
        int t,c;  //代表行
        memset(sum,0,sizeof(sum));
        for(c=1 ; c<=n ;c++)
        {
            for(t=i; t<=j; t++)
                sum[c]+=a[c][t];
        }
        
        return ;
    }
    
    int DP()
    {
        int i,TMPSUM,SUM;
        TMPSUM=SUM=0;
        for(i=1; i<=n; i++)  //代表行
        {
            TMPSUM+=sum[i];
            if(TMPSUM>SUM) SUM=TMPSUM;
            else if(TMPSUM<0) TMPSUM=0;
        }
    
        return SUM;
    }
    int main()
    {
        int i,j,ans,max;
        input();
        max=INF;
        for(i=1; i<=n; i++)
            for(j=i; j<=n; j++)
            {
                get_sum(i,j);  //压缩二维空间为一维,求出每一行的i列到j列的连续和,再按行来进行DP求解
                ans=DP();
                max=ans>max ? ans : max;
            }
        printf("%d\n",max);
        return 0;
    }
  • 相关阅读:
    软工结对第一次作业
    16061023-软件工程第1次作业
    OO最后一次总结
    OO第三次博客作业
    OO第二次博客作业
    OO第一次博客
    提问回顾与个人总结
    软件工程第一次阅读作业
    test个人博客
    软件工程结对作业
  • 原文地址:https://www.cnblogs.com/scau20110726/p/2740739.html
Copyright © 2020-2023  润新知