然后因为 RMJ 寄了 SP 的经验吃不到了现在又成双倍了。
思路
可搭配
它一起食用。
算了再说句闲话:狱警贿赂囚犯也是猎天下之大奇。
一眼区间 DP。
先设计下状态:设
dpi,j 为释放区间
[i,j] 内囚犯贿赂最小代价。
然后易得状态转移方程为:
dpi,j=k=iminj(dpi,k−1+dpk+1,j+aj+1−ai−1−2)
关于 min
式子
i=xminyai 等同于
min(ax,ax+1,...,ay−1,ay)
其中
ai 表示第
i 个需要释放的囚犯编号。
蓝色部分为释放囚犯
ak 前所需最小代价,红色部分为释放囚犯
ak 所需最小代价。
由于释放
ak 会将全场分为
[i,k−1] 和
[k+1,j] 两个独立的区间,所以
为什么红色部分是
aj+1−ai−1−2 呢?
很简单,释放
ak 时,需贿赂
[ai−1+1,ak−1]∪[ak+1,aj+1−1] 的所有囚犯,代价为:
(ak−ai−1−1)+(aj+1−ak−1)=aj+1−ai−1−2
最后思考初始值,很明显:
- 当 i>j 时,dpi,j=0,因为此时 [i,j]=∅,无任何囚犯需要释放。
- 当 i≤j 时,dpi,j 默认为 inf。
答案为
dp1,Q,即释放区间
[1,Q] 内所有囚犯的最小代价。