题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805514284679168
dp+贪心
贪心思路:
- 每次计算加上当前
q[i]
,如果使得res变大,就将i放到子序列里 - 同时维护一个
f[i]
,如果加上当前q[i]
使得f[i]
变为负值,说明当前q[i]+f[i-1]
是负收益,就舍弃,并从新开始计算
dp思路
- 集合:
f[i]
代表以q[i]
结尾最大的子序列的和 - 属性:MAX
- 状态转移:上一个状态肯定是
f[i-1]
,根据贪心思路,如果会使得res变大则将i加入到子序列中即:f[i] = max(f[i-1]+q[i], q[i])
,否则就舍弃,开始从q[i]
计算一个新的子序列和
坑点:
- 无非是,
res<0时 begin = 1,end = n
AC代码:
#include <iostream>
#inclu