zoukankan      html  css  js  c++  java
  • Maximum sum(poj 2479)

    题意:给一段数列,将这个数列分成两部分,使两部分的最大子段和的和最大,输出和
    /*
      看数据没想到是(O)n的算法,求出从前向后的最大子段和和从后向前的最大子段和,
      然后枚举断点。 
      第一次提交不小心折在数组最小值的赋值上…… 
    */ 
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #define M 50010
    #define INF 1000000000
    using namespace std;
    int a[M],f1[M],f2[M],v1[M],v2[M],n;
    int main()
    {
        int T;scanf("%d",&T);
        while(T--)
        {
            memset(f1,466,sizeof(f1));
            memset(f2,466,sizeof(f2));
            memset(v1,466,sizeof(v1));
            memset(v2,466,sizeof(v2));
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
              scanf("%d",&a[i]);
            for(int i=1;i<=n;i++)
              f1[i]=max(f1[i-1]+a[i],a[i]),v1[i]=max(f1[i],v1[i-1]);
            for(int i=n;i>=1;i--)
              f2[i]=max(f2[i+1]+a[i],a[i]),v2[i]=max(f2[i],v2[i+1]);
            int ans=-INF;
            for(int i=1;i<n;i++)
              ans=max(ans,v1[i]+v2[i+1]);
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Lc112_路径总和
    多线程(4)
    Lc257_二叉树的所有路径
    Lc226_翻转二叉树
    Lc145_二叉树的后序遍历
    Lc144_二叉树的前序遍历
    Lc102_二叉树的层序遍历
    Lc101_对称二叉树
    Lc100_相同的树
    Lc94_二叉树的中序遍历
  • 原文地址:https://www.cnblogs.com/harden/p/5934678.html
Copyright © 2011-2022 走看看