设 \(f_{i,j}\) 为走到第 \(i\) 层,第 \(j\) 个房间,损失的最小健康点是多少。
然后注意到只有梯子端点处这些特殊点的 dp 值是需要维护的,处理同一层特殊点之间的转移,就把转移拆成两种,一种是从前面的房间转移到后面的房间,一种是后面的房间转移到前面的房间,这两种转移从前往后或者从后往前扫一下,把 dp 式子拆一下,用个 堆/set/变量 来记录最优的转移就可以了。
如果整数排序是线性的话,总复杂度可以线性。
整数排序并不是线性但是如果换成线性整数排序总复杂度就是线性的代码:
#include
#include
#include
#include
#include
#include
#include