zoukankan      html  css  js  c++  java
  • poj 1050 To the Max 二维矩阵转换一维求子序列最大值

      因为 N = 100, 最大子矩阵行与行之间相邻,我们可以 O(N*N)内枚举子矩阵由哪些行组成,

    然后把多行合并成一行后,当一维数组求连续子序列和。时间复杂度接近 O(N*N*N) = 10^6 

    解题代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    const int inf = 0x3fffffff;
    
    int a[110][110], b[110];
    int dp[110], ans, n;
    
    int main()
    {
        while( scanf("%d", &n) != EOF)
        {
            for(int i = 1; i <= n; i++)
                for(int j = 1; j <= n; j++)
                    scanf("%d", &a[i][j]);
            ans = -inf;    
            for(int i = 1; i <= n; i++)
            {
                memset( b, 0, sizeof(b));    
                for(int j = i; j <= n; j++)
                {
                    for(int k = 1; k <= n; k++)
                        b[k] += a[j][k];
                    int tmp = -inf;
                    for(int k = 1; k <= n; k++)
                    {
                        if( tmp < 0 ) tmp = b[k];
                        else    tmp += b[k];
                        if(tmp > ans) ans = tmp;
                    }
                }
            }    
            printf("%d\n", ans );    
        }
        return 0;
    }
  • 相关阅读:
    google搜索的使用小窍门
    openssl的使用
    vi vim 的使用
    nfs
    setfacl命令的使用
    JAVA记录
    Yapi基本使用
    Yapi部署
    Mysql问题记录
    Spring boot+MYSQL多数据源
  • 原文地址:https://www.cnblogs.com/yefeng1627/p/2849994.html
Copyright © 2011-2022 走看看