这道题最神奇的地方:无论你合并多少张左侧卡牌,新卡牌的分值永远等于这些卡牌的“前缀和”

那么我们只需要让总得分累加那些个大于0的前缀和(注意从2开始,因为至少要两张卡牌),就能得到总得分的最大值

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

int main() {
    int n;
    cin >> n;
    long long temp;
    vector<long long> s(n + 1, 0);
    for (int i = 0; i < n; i++) {
        cin >> temp;
        s[i + 1] = s[i] + temp; // s[1]到s[n]
    }
    long long total_score = 0;
    // 我们可以选择在任何一个位置 i (2 <= i <= n) 停下,
    // 只要前缀和 s[i] > 0,我们就可以把它加入总得分total_score
    for (int i = 2; i <= n; i++) {
        if (s[i] > 0) {
            total_score += s[i];
        }
    }
    cout << total_score << endl;
    return 0;
}