解题思路
探险家可以执行 清除 和 收集 操作各至多一次,且清除操作如果在收集之后执行则没有意义,因此最优策略一定是先清除一部分宝箱,再进行一次收集(也可能不执行任何操作,或只执行其中一个操作)。
我们把宝箱按收集顺序 p 重新排列,得到序列
si=api(1≤i≤n)
那么“选择一个 t ,按 p1,…,pt 收集”就等价于取序列 s 的一个前缀和 ∑j=1tsj 。若从未进行清除,则收益就是 max1≤t≤n∑j=1tsj(以及 0)。
现在考虑先进行清除。清除操作按清除顺序 q 进行,依次将 q1,q2,…,qu 这些宝箱的当前价值变为 0 。在序列 s 中,宝箱 x 出现的位置是它在 p 中的下标,记为 pos[x](即 ppos[x]=x)。将宝箱 x 的价值清零,相当于把 spos[x] 变为 0 ,这会使得所有包含该位置的前缀和都减少 ax 。具体来说,前缀和数组