[ABC219H] Candles
[ABC219H] Candles
Problem
\(N\) 支蜡烛放在无限延伸的数轴上。\(i\) 第一支蜡烛的坐标是 \(x_i\),在 $0 $ 的时刻,蜡烛的长度是 $a_i $。点燃的蜡烛每 \(1\),长度就短 \(1\),当长度为 \(0\) 时,蜡烛就会燃烧殆尽,之后长度不变。另外,被熄灭的蜡烛的长度不变。
高桥君在 \(0\) 时刻坐标 \(0\),每分钟可以移动不到 \(1\)。高桥君在与自己所在坐标相同的坐标上有蜡烛的情况下,能够将蜡烛的火熄灭。(同一坐标中有多个蜡烛的情况下可以一起吹灭)在这里,熄灭蜡烛所需的时间可以忽略不计。
请求出高桥采取适当行动时,从 \(0\) 到 $ 10^{100}$ 分钟之后剩下的蜡烛长度之和可能的最大值。
$ 1\ \leq\ N\ \leq\ 300 \(,\) -109 \leq X_i \leq 109 \(,\) 1\ \leq\ A_i\ \leq\ 10^9 $。
Solution
闲话:可能是 OI 生涯最神圣的一次了,考试的时候想 + 写用了 20min,没写对拍,竟然过了。
不过能做出来还是有一个很大原因的,那就是前一天做了 这个题。
首先离散化。
看到这个坐标轴上左右游走的模型,不难想到区间 dp。
由于需要知道移动的距离,则对于一个状态到另一个状态的转移,需要在状态中记录位置信息。幸运的是,这是好维护的:考虑走完 \([l, r]\),则此时必然停在左端点处或右端点处。
记 \(f_{l, r, 0/1}\) 表示考虑完区间 \([l, r]\),此时停在左/右端点的最大权值。
在转移时,考察当前蜡烛对权值的增量,发现需要知道停在此蜡烛时已经过去了多少时间。不幸的是,这实在是无法维护了。
我们先考虑弱化版问题,即蜡烛的长度可以为负数,并且要将所有蜡烛的最终长度计入贡献(即使是负数)。
问题出在蜡烛的减少量无法对每个蜡烛 独立 地进行贡献。那么就采用 整体思想,对于一次移动,发现所有区间外的蜡烛都会减少相同的长度,那么可以在这一步就将这些减少量全部减掉。这本质上是 费用提前计算 的思想。
回到本题,你不能直接将区间外的所有蜡烛都减去这一步走的代价,因为蜡烛的长度不能小于 \(0\)。但是蜡烛的长度等于 \(0\) 时,对答案没有任何贡献,于是可以把这种情况视作这根蜡烛根本就不存在,或者说你并没有选择这根蜡烛计入答案权值。于是一个新的信息呼之欲出:考虑完当前区间后,区间外的蜡烛中还要有多少个被你考虑在内。
记 \(f_{l, r, k, 0/1}\) 表示考虑完区间 \([l, r]\),停在左/右端点,并且区间外还有 \(k\) 个被计入最终答案权值的蜡烛。
转移的时候枚举当前蜡烛是否被考虑计入答案权值,并只将 \(k\) 个蜡烛减去同一个代价,而不是将所有区间外的蜡烛都减去代价。这样总能保证在最优方案内,把那些讨厌的在移动过程中长度就已经变为 \(0\) 的蜡烛给排除在外。
濒死的红烛未知将来的灭亡,井底之蛙难观自己已陷得多深。诚然,人类并不生活在井里。可他们也曾试图钻入地心,试图认识邃蓝的海洋。下降。而如今,他们甘愿用小男孩的眼泪将这片美丽禁锢,化作他们发光的钻石;黄土坡混杂着浑黑的石粒,黄沙漫天更有高高飘过的白云。没落。
我们如何等待小男孩穿越井下的天空,烧尽泪水的最后一抹余晖。

浙公网安备 33010602011771号