• POJ 2479 Maximum sum


    http://poj.org/problem?id=2479

    题意:

    给出一个整数串,求连续子串1和连续子串2,不相交并且串1加串2的和最大。

    思路:

    其实就是求最大连续和,题意要求就是求两段最大连续和。我们可以从左边和右边分别求最大连续和,代码中的dp_l[i]就是1~i的最大连续和,dp_r[i]则是i~n的最大连续和

     1 #include<iostream> 
     2 #include<string>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const int maxn = 50000 + 5;
     8 const int INF = -10000000;
     9 
    10 int n;
    11 int a[maxn];
    12 int l[maxn], r[maxn];
    13 int dp_l[maxn], dp_r[maxn];
    14 
    15 int main()
    16 {
    17     //freopen("D:\txt.txt", "r", stdin);
    18     int T;
    19     scanf("%d", &T);
    20     while (T--)
    21     {
    22         scanf("%d", &n);
    23         for (int i = 1; i <= n; i++)
    24             scanf("%d", &a[i]);
    25         l[0] = dp_l[0] = INF;
    26         r[n+1] = dp_r[n+1]=  INF;
    27         for (int i = 1; i <= n; i++)
    28         {
    29             l[i] = max(l[i - 1] + a[i], a[i]);
    30             dp_l[i] = max(dp_l[i - 1], l[i]);
    31         }
    32         for (int i = n; i >= 1; i--)
    33         {
    34             r[i] = max(r[i + 1] + a[i], a[i]);
    35             dp_r[i] = max(dp_r[i + 1], r[i]);
    36         }
    37         int ans = INF;
    38         for (int i = 1; i <= n; i++)
    39         {
    40             ans = max(dp_l[i] + dp_r[i + 1], ans);
    41         }
    42         printf("%d
    ", ans);
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    oracle 体系结构
    Oracle存储过程语法
    oracle 触发器
    oracle 存储过程
    oracle 高水位线详解
    oracle索引总结
    Oracle的表空间、数据文件、用户
    Oracle实例和数据库区别
    [whu1564]后缀数组
    [hdu4552]最长公共前缀
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6384448.html
Copyright © 2020-2023  润新知