2023-10-20 模拟赛
C
\(50\) 的 dp 是很简单的,设 \(f_{i, j}\) 表示前 \(i\) 位有 \(j\) 个红色石子的答案,转移显然。code
这个 dp 看着并不是很好优化,我们回顾一下每个石子贡献的计算。对于一个红色石子,其贡献为 \(a_i + d \times (i - pre_i)\),其中 \(pre_i\) 表示前 \(i\) 个石子中红色石子的个数。
如果全是红色石子的话,那么贡献就是 \(\displaystyle\sum_{i = 1}^n a_i + d \times pre_i = (\sum_{i = 1}^n a_i + id) - \sum_{i = 1}^n pre_i\)。前一项是常数,后一项只和红色点数量有关,所以我们考虑全是蓝色点,然后按照这个式子贪心染色。
实现上,我们发现替换掉一个蓝色石子的贡献是 \(a_i - b_i + i(d - c)\)。