[Procedure #18] CF2133F Flint and steel
[Procedure #18] CF2133F Flint and steel
from latest cf div2 [Start]
这个,好吧不是那道典题,这里的 creeper 是不能连锁引爆的,但是也不同于经典的选线段覆盖问题,因为 creeper 炸死就不能被选了。所以一些看起来直接的想法可能不对,原因在于它可能方案是比较复杂的。
好像也没有很复杂。不过确实有一个很大的问题,如图示情况

他能通过设 \(f_i\) 表示前 \(i\) 个已经被炸死的最小代价来求解吗?不可以!因为有时候就是要先做右边然后再做左边的(如上),所以顺序是不对的。所以我们必须保留关于使用的 creeper 的信息。那么,我们可以按直觉,保留最右边那个 creeper 吗?可以,不可能存在不和最右边那个互炸却和之前的互炸的可能性,容易通过分类讨论证明。
那么由于最优性,不会存在区间包含,最远炸到的位置就是最右边 creeper 的右端点,所以我们可以用只存最右边那个 creeper。
分类讨论:
-
\(j<i-e_i+1\le j+e_j-1\le i+e_i-1\),\(i\) 不会炸 \(j\),且保证不互相包含,否则可能导致非法转移,如
0 3 1 3 0所示 -
\(i-e_i+1\le j+e_j-1<i\),\(j\) 不会炸 \(i\)
\(\implies j\in [i-e_i-e_j+2,i-e_j]\)
满足上述任意一个条件都能转移。考虑线段树优化并扫描线。
考虑如何构造方案,我们这样能直接得到需要点燃哪些 creeper,但是顺序是不能得到的(因为只记录了最后一个 creeper),但是,如果按能力从小到大点燃他们,肯定合法。
[End]
本文来自博客园,作者:haozexu,转载请注明原文链接:https://www.cnblogs.com/haozexu/p/19069001

浙公网安备 33010602011771号