题解:P11233 [CSP-S 2024] 染色
2024/10/27 更新:增加了一些详细的描述。其实这个思路不难,同机房大佬也说“如果按我这个思路那么这题只有绿”,所以不应该花太多文字去讲,否则看起来更加混乱。但是因为有人问到了一些细节的问题,那就在这里补充一下。
设
对于第
如果它没有贡献,直接
如果它有贡献,以
那么前面一定也有一个染成了颜色
不难想到要选择前面的最后一个相同的数,因为如果不是最后一个,就可以在这两个数中间所有染成
设前面这个相同的数的位置为
- 位置在
1\sim l+1 的数产生的贡献,其中l+1 染成了颜色1 。这个贡献即为dp_{l+1,1} 。此时不需要担心l 没有被染成颜色0 的问题,因为dp_{l+1,1} 会选择最优策略,那么l 此时是可以选择不和l+1 染成同一个颜色的。 - 位置在
l+2\sim i-1 的数产生的贡献,这个贡献即为将l+1\sim i-1 全部染成同一个颜色会产生的贡献。设s_i 表示1\sim i 染成同一个颜色的贡献,那么l+1\sim i-1 全部染成同一个颜色会产生的贡献,或者说位置在l+2\sim i-1 的数产生的贡献,就是s_{i-1}-s_{l+1} 。 - 位置在
i 的数产生的贡献,它等于a_i 。
因此如果第
在产生贡献和不产生贡献的最大得分取
其实
代码见此。