• HDU 1231 最大连续子序列


    http://acm.hdu.edu.cn/showproblem.php?pid=1231

    Dp[i] 以a[i]元素结尾的子序列的最大和

    记录 再记录一下起始位置即可

     1 #include <iostream>
     2 #include <string.h>
     3 #include <stdio.h>
     4 using namespace std;
     5 
     6 int a[10007];
     7 int dp[10007];
     8 int st[10007];
     9 int main()
    10 {
    11     int n;
    12     while(cin >> n)
    13     {
    14         bool neg = true;
    15         if (!n) break;
    16         memset(dp, 0 ,sizeof(dp));
    17         for (int i = 0; i < n; i++)
    18         {
    19             scanf("%d", &a[i]);
    20             if (a[i] >= 0) neg = false;
    21         }
    22         if (neg)
    23         {
    24             cout << 0 << " " << a[0] << " " << a[n-1] << endl;
    25             continue;
    26         }
    27         dp[0] = a[0];
    28         st[0] = 0;
    29         for (int i = 1; i < n; i++)
    30         {
    31             if (dp[i-1]+a[i] > a[i])
    32             {
    33                 dp[i] = dp[i-1]+a[i];
    34                 st[i] = st[i-1];
    35             }
    36             else
    37             {
    38                 dp[i] = a[i];
    39                 st[i] = i;
    40             }
    41         }
    42         int ans = -1e9;
    43         int index = 0;
    44         for (int i = 0; i < n; i++)
    45         {
    46             if(ans < dp[i])
    47             {
    48                 index = i;
    49                 ans = dp[i];
    50             }
    51         }
    52         cout << ans << " " << a[st[index]] << " " << a[index] << endl;
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    有限制的最大连续和问题
    Codevs 5056 潜水员
    Codevs 1958 刺激
    Codevs 3731 寻找道路 2014年 NOIP全国联赛提高组
    [NOIP2014]解方程
    Codevs 3729 飞扬的小鸟
    Codevs 1689 建造高塔
    Codevs 2102 石子归并 2
    C语言基础之进制的那些事(1)
    指针
  • 原文地址:https://www.cnblogs.com/oscar-cnblogs/p/6745548.html
Copyright © 2020-2023  润新知