[Procedure #13] CF1481E Sorting Books

[Procedure #13] CF1481E Sorting Books

[Start]

首先,如果你想取一类书,那么除非这种书本身就有一部分在末尾,否则肯定是连续取完的。吗?不对,不一定。

观察:肯定至少有一种书是不用移动的。如果两种书互相交叉,肯定至少有一种需要移动。

我们把一种书的分布范围抽象出一个区间,那么最终状态就是所有区间都不相交。对一种书做一次操作,假如选择的点是 L,那么区间就会 R 到最后,L 收缩,否则,区间 L 不变(相对于其他点,不是指绝对位置),R 到最后。

[Hint] 考虑 DP 它的对偶问题,即至多不移动几本书。

首先不动的数构成的区间不可以重叠。然后显然不动的数构成的区间是这种数原来区间的子区间。

如图,我们考虑最上面那一排区间是我们决定不动的数,下面的是原区间。由于不能改变相对顺序,所以我们考虑先动蓝色的,但是我们发现橙色的区间的右端点超过了蓝色的,然而区间的右端点无法收缩,只有左端点可以收缩,所以这种不动方案就是不行的。

2025-08-26-10-59-04-image.png

2025-08-26-10-59-33-image.png

同理这些也是不行的。

因此我们可以得出结论,选择不动的颜色,除了最后一种选择不动的颜色之外,其他的一定所有这种颜色的点都不动且区间互相不交,最后一种是任意的,没有限制,其他的颜色都是全都必须要动的。

因此我们可考虑 \(f_{i,0/1}\) 表示前 \(i\) 个数中最多不动的点数,且当前是否已经选择了一个没有限制的区间。

转移考虑,如果当前是一个右端点:

  • 考虑将这个区间选择为一个有限制的区间,\(f_{i,0}\gets f_{l_i-1,0}+cnt_i\)

  • 考虑将这个区间选择为一个没有限制的区间,$f_{i,1}\gets $ 对于每个颜色是 \(col_i\) 的点 \(j\),贡献 \(f_{j-1,0}+j\sim i\) 中有几个 \(col_i\) 的点。

对于所有:

  • 考虑不选择/不能选择:\(f_{i,1}\gets f_{i-1,1},f_{i,0}\gets f_{i-1,0}\)

初始化:\(f_{0,0}=f_{0,1}=0\)。目标 \(n-\max(f_{n,0},f_{n,1})\)

对于每一个颜色的点,我们记录一下这个贡献值,以备使用,即可做到 \(\mathcal O(n)\)

[Finish]

Thoughts Memo

可以考虑 DP 问题的对偶问题,这个问题可能限制性更大,例如本题中如果书本不能移动,那么相对位置就不能改变,所以比原问题好处理。

posted @ 2025-08-26 11:31  haozexu  阅读(8)  评论(0)    收藏  举报