zoukankan      html  css  js  c++  java
  • 动态规划最大连续子序列

    题目链接:http://poj.org/problem?id=2479

    题目大意:给你一个数组, 输出两个不相交的连续子数组的最大和。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cstdlib>
    #include <cmath>
    #include <set>
    #include <map>
    #include <vector>
    #define LL long long 
    using namespace std;
    
    LL a[50010], l[50010], r[50010];// l[i] 以 i 结束的最大和 ; r[i] 以 i 开始的最大和。
    int max(int a, int b)
    {
        return a > b ? a : b;
    }
    int main()
    {    
        int t, n, i;
        scanf("%d", &t);
        while(t--)
        {
            scanf("%d", &n);
            for(i = 1; i <= n; i++)
                scanf("%lld", &a[i]);
            l[1] = a[1];
            for(i = 2; i <= n; i++){
                l[i] = max(l[i - 1] + a[i], a[i]);
                //cout<< l[i] << " ";
            }
            r[n] = a[n];
            //cout << endl;
            for(i = n - 1; i > 0; i--){
                r[i] = max(a[i], r[i + 1] + a[i]);
                //cout << r[i] << " ";
            }
            //cout << endl;
            for(i = 2; i <= n; i++)
                l[i] = max(l[i - 1], l[i]);
            for(i = n - 1; i > 0; i--)
                r[i] = max(r[i + 1], r[i]);
            LL sum = l[1] + r[2];
            for(i = 2; i < n; i++){
                //cout << l[i] + r[i + 1]<< " ";
                if(l[i] + r[i + 1] > sum)
                    sum = l[i] + r[i + 1];
            }
            printf("%lld
    ", sum);
        }
        return 0;
    }
  • 相关阅读:
    hbase
    spark-streaming
    spark-Scala
    经典台词二
    星爷电影经典台词一
    Hadoop第一阶段总结
    测试2
    POI 表格数据导出
    GC垃圾回收机制
    Java常见的200道面试题
  • 原文地址:https://www.cnblogs.com/luomi/p/5433067.html
Copyright © 2011-2022 走看看