zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    //判断安卓 和ios
    不同屏幕适配
    在iOS设备下,h5的input框失焦后页面被顶起来一部分bug 用css解决办法
    div跟随手指滑动
    滑动事件
    手指长按事件
    es6数组属性
    loading加载百分比 以及根据加载进度移动元素
    刮刮乐
    h5上传图片并预览
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6384448.html
Copyright © 2011-2022 走看看