zoukankan      html  css  js  c++  java
  • C. Alternating Subsequence(思维题)

    题意:给出一串有正有负的整数,要求找到最大的符合+-+-+-(或者-+-+-+)的最大子序列。注意:该序列可以跳着选,但是顺序不能变。

    题解:从头开始加,如果两个数符号相同,就比较大小,选出最大的数加入子序列(最大的数加最大的数当然最大啦)。

    ACcode:

    int n,a[200010],b[200010];//数组太大,建议放main函数外面。
    int main()
    {
    int t;
    cin >> t;
    while (t--)
    {
    cin >> n;
    for (int i = 0; i < n; i++)
    {
    cin >> a[i];
    if (a[i] > 0) b[i] = 1;
    else b[i] = -1;//另存符号,方便比较
    }
    int maxn = a[0]; ll sum = 0;
    for (int i = 1; i < n; i++)
    {
    if (b[i] == b[i - 1])//如果符号相同,就比较大小,选最大值求和
    {
    if (a[i] > maxn)
    maxn = a[i];
    }
    else//如果符号不同,就把之前找到的最大值加入和,寻找改变符号后的新最大值
    {
    sum += maxn;
    maxn = a[i];
    }
    }
    cout << sum+maxn << endl;//这里的maxn是最后一次找到的最大值,也要记得加进去。
    }
    return 0;
    }

  • 相关阅读:
    第一次作业
    C语言I博客作业02
    C语言|博客作业11
    C语言I博客作业10
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    JDK-14 & Eclipse & Hello World!
  • 原文地址:https://www.cnblogs.com/Uiney117/p/14509411.html
Copyright © 2011-2022 走看看