本来想写 wqs 二分来着,然后推不出 dp 方程,摆烂了。
题目描述
给定含 \(n\) 个数的序列,求至多 \(k\) 个不相交子段的和的最大值。
具体思路
由于选 \(k\) 堆连续的数,因此一堆连续的符号相同的数,只有可能是同时被选或者同时不被选。
因此我们先对原序列预处理一遍,将相同符号的合并到一起。
现在的序列就是一个正负交替的序列。
要答案最大,那我们肯定先把所有正数都选出来。
若正数个数小于等于 \(k\),那我们直接输出就好了,因为再选一些负数只会让我们的答案变得更小。
若正数个数大于 \(k\),此时我们有两种操作。
-
操作 1:将选定的正数中删除一部分正数。
-
操作 2:将两堆正数连同它们之间的负数合并成一堆,这样堆数就会减少一堆。