因为题目要求连续,所以只能从相邻的状态转移过来。 改一下最长上升子序列这道题的转移方程就可以了

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

const int N = 1000000 + 10;

int n;
int a[N];
int f[N];

int main()
{
    while (cin >> n)
    {
        for (int i = 1; i <= n; ++i)
            scanf("%d", &a[i]);
        f[1] = a[1];
        for (int i = 2; i <= n; ++i)
        {
            f[i] = a[i];
            f[i] = max(f[i], f[i-1] + a[i]);
        }
        int res = -0x3f3f3f3f;
        for (int i = 1; i <= n; ++i)
            res = max(res, f[i]);
        printf("%d\n", res);
    }
    return 0;
}