一共有 n (n<=200000) 瓶药剂,每一瓶药剂既可以喝也可以不喝,初始生命值为sum=0,每喝一种药剂 生命值变为 sum+=
a
i
a_i
ai,要求喝尽可能的多的药剂,但必须保证生命值时刻非负。
思路:
假设当前到了第
i
i
i 瓶药剂,并且前
i
−
1
i-1
i−1 已经选择了最优方案,被选中的药剂集合
q
i
−
1
q_{i-1}
qi−1,此时我们直接喝下第
i
i
i 瓶药剂,然后判断生命值是否非负,如果为负数,则逐渐删除
q
i
q_{i}
qi中最小的元素 ,直到生命值非负。确实就是反悔加贪心
证:每删除
q
i
q_{i}
qi 中的一个最小元素
y
y
y 付出 1 的代价,收获的确是最多的,并且因为是这样转移的,所以前面每一个
q
x
q_{x}
qx 都是合法的,他们在删除
y
y
y 后仍然合法。