先大力分类讨论:
- 有 \(\texttt +\),此时如果有 \(\texttt-\) 它也没有用,被 \(\texttt+\) 代替会更优。
- 有 \(\texttt*\),这是接下来讲的重点;
- 无,那就全部 \(\texttt+\);
- 无,此时有 \(\texttt-\) 的话就有用了。
- 有 \(\texttt-\)。
- 有 \(\texttt*\),这个还稍微有点东西,但也非常简单。如果没有 \(0\) 那显然全 \(\texttt*\),否则答案下限是 \(0\),然后考虑有 \(\texttt-\) 的情况。那就分成至少两段,第一段的贡献是正的,后面都是负的。那么显然找到第一个 \(0\) 前面都是 \(\texttt*\),然后 \(\texttt-\) 一下后面都是 \(\texttt*\) 是最优的,因为最大化了第一段也最小化了后面;
- 无,那就全 \(\texttt-\);
- 无,那就全 \(\texttt*\)。
- 有 \(\texttt-\)。
下面重点讨论上述重点。
我们显然有一个平方的 DP,就是考虑对这个 \(\texttt*\) 段 DP,每次用前缀积 \(\mathrm O(n)\) 转移。然后也一脸优化不了。于是我们来找性质。
显然所有 \(0\) 两边都必须是 \(\texttt+\),如果是 \(\texttt*\) 的话改成 \(\texttt+\) 显然更优。也就是 \(0\) 们把整个数列分成了独立的好几段,考虑对每段分别考虑。
然后如果全部 \(>1\) 的话,显然是全 \(\texttt*\) 最好。但关键有 \(1\) 存在,可以弱化成这样一个结论:相邻两个 \(>1\) 之间必须是 \(\texttt*\),也容易反证。于是我们把它们缩起来。
那么 \(1\) 可以看作浓缩饼干之间的桥梁。如果想要把两边断开的话,那就全 \(\texttt+\) 最好,否则只能全 \(\texttt*\) 才能连上。于是就变成了对 \(1\) 段们的决策问题,似乎还是需要类似一开始的平方 DP。
但这时候有个好性质:一旦如果全 \(\texttt*\) 能够非常大的话(我取的是 \(10^9\)),那就所有桥梁必须连起来,否则单凭加法的力量是完全被降维打击的。只有两端的 \(1\) 段能够 \(\texttt+\)。然后又因为每段浓缩饼干都 \(\geq2\),所以这时候段数是 \(\log\) 级的,那怎么乱搞都可以了吧。我们依然考虑上述 DP,前缀积优化转移,记录路径,总复杂度 \(\mathrm O\!\left(n\log^2\right)\)。