CF1416E Split

发布时间 2023-10-13 17:40:39作者: ydtz

暴力 dp 是很拉跨的,我们会设 \(dp_{i,j}\) 表示前 \(i\)\(a_i\) 分裂后,最后一个 \(b\)\(j\) 时的最小答案,爆炸。

但这里面有很多性质啊,直观地我们可以感受到,若已经确定了决策 \(dp_{i-1,k}\),那么无论如何选择 \(a_i\) 的分裂方式,对答案带来的贡献都会在 \(0\sim 2\) 之间,即,当前决策的影响是很弱的。

并且我们发现,如果存在一个可能更加优秀的非最优决策,也最多只能额外达成和 \(b_{2i-1}\) 贴合的 \(1\) 的贡献,即,之前的最优状态一定可以作为最优决策。(像是更强的最优子结构性质)

上面这条性质太核心了。

所以我们考虑能否维护每一轮 dp 之后的最优状态集合。

假设我们已经拿到了前 \(i-1\) 轮 dp 结束后的最优决策集合,思考第 \(i\) 轮 dp 的具体贡献。

  • \(a_i\) 为偶数,此时 \(a_i\) 拆分的贡献只为 \(0/1\)
    • 若最优决策集合内存在 \(\frac{a_i}{2}\),可以达成贡献 \(0\),此时新最优决策集合增加 \(\frac{a_i}{2}\)
    • 否则一定无法达成贡献 \(0\),最优贡献一定为 \(1\)
      • 一定可以有新最优决策 \(\frac{a_i}{2}\)
      • 对于最优决策集合内所有 \(p<a_i\) 的决策 \(p\),都可以使得新最优决策集合增加 \(a_i-p\)
  • \(a_i\) 为奇数,此时 \(a_i\) 拆分的贡献只为 \(1/2\)
    • 若最优决策集合内存在 \(p<a_i\) 的决策 \(p\),都可以达成贡献 \(1\),新最优决策集合增加 \(a_i-p\)
    • 否则只能达成贡献 \(2\),此时 \(a_i\) 可以随意拆分,新最优决策集合增加决策 \([1,a_i)\)

我们发现每轮 dp 后的最优决策集合相比上轮,可能会加一个值,可能会将一些数 \(\times (-1)+a_i\) 后把剩下的数删掉,也可能会把集合变成一个值或一个区间,故维护系数 \(k,b\),表示集合内实际维护的是 \(kx+b\),该清空就清空,即可做到 \(O(n\log n)\) 的时间复杂度。

若上一层的最优状态一定可以作为下一层的最优决策,可以考虑直接对最优决策集合进行维护。