P4823 [TJOI2013] 拯救小矮人

发布时间 2023-10-24 08:52:53作者: 御坂夏铃

发现无论选择哪些逃跑的小矮人,只要存在可行逃跑顺序,那么按逃跑能力从弱到强依次逃跑肯定可行。这或许难以理解,但只要将逃跑的过程反过来就豁然开朗了:人梯高度单调不降,如果逃跑能力弱的都能够到,那还不如让逃跑能力强的先来增高。

所以排序后就可以 DP 了,令 \(f_{i,j}\) 表示前 \(i\) 个人逃出 \(j\) 个时,人梯剩余的最大高度,时间复杂度 \(O(N^2)\)

当然我们还可以使用反悔贪心来做。区别于不确定就不做的 DP,反悔贪心的思想是先做了再说,但之后必须存在办法改回来。

建一个以身高为关键字的反悔堆,把已经逃出去的小矮人丢进去。如果当前小矮人出不去且身高低于堆里身高最大的小矮人且换掉堆里身高最大的小矮人就能出去,则说明进行这样一个替换能在出去人数不变的情况下让人梯高度增加。而这样的替换显然是不可逆的,被换掉的小矮人就只能一直当人梯了。

正确性很显然,因为每一步都能将局部最优转换成当前最优。时间复杂度 \(O(N\log N)\)