zoukankan      html  css  js  c++  java
  • zoj1074 To the Max

    题目很简单,求一个连续的最大子矩阵的值.

    zoj上的数据非常弱。

    首先爆搜是O(N^4),10^8的复杂度略高,那么我们可以处理一下其中一维的前缀和,降一阶,然后按照连续最大子序列来处理,因为可能为负数,所以基数不能取0.

    上代码

    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<map>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int n;
    int a[105][105];
    int dp[105];
    int main()
    {
        int t;
       //freopen("input.txt","r",stdin);
       scanf("%d",&n);
       for(int i=1;i<=n;i++)
         for(int j=1;j<=n;j++)
       {
        scanf("%d",&t);
        a[i][j]=a[i][j-1]+t;
       }//每一行的前缀和
       int res=-1280000;
       for(int i=0;i<=n;i++)
         for(int j=i+1;j<=n;j++)
       {
           memset(dp,0,sizeof(dp));
           for(int k=1;k<=n;k++)
           {
               int t=a[k][j]-a[k][i];
               if(dp[k-1]<0)
                dp[k]=t;
            else
                dp[k]=dp[k-1]+t;
                if(dp[k]>res)
                res=dp[k];
           }
       }
       printf("%d
    ",res);
    }
  • 相关阅读:
    Codeforces_462_B
    Codeforces_460_B
    Codeforces_456_A
    2016.11.27
    Buy the Ticket{HDU1133}
    高精度模板
    盐水的故事[HDU1408]
    测试你是否和LTC水平一样高[HDU1407]
    完数[HDU1406]
    Air Raid[HDU1151]
  • 原文地址:https://www.cnblogs.com/acliang/p/4876046.html
Copyright © 2011-2022 走看看