题解:P13439 [GCJ 2009 #1C] Bribe the Prisoners

· · 题解

传送门

三倍经验:P1622 和 SP14846。

然后因为 RMJ 寄了 SP 的经验吃不到了现在又成双倍了。

思路

可搭配它一起食用。

算了再说句闲话:狱警贿赂囚犯也是猎天下之大奇。

一眼区间 DP。

先设计下状态:设 dp_{i,j} 为释放区间 [i,j] 内囚犯贿赂最小代价。

然后易得状态转移方程为:

dp_{i,j}=\min\limits_{k=i}^{j}(\color{blue}dp_{i,k-1}+dp_{k+1,j}\color{black}+\color{red}a_{j+1}-a_{i-1}-2\color{black})

::::info[关于 \min]

式子

\min\limits_{i=x}^ya_i

等同于

\min(a_x,a_{x+1},...,a_{y-1},a_y)

::::

其中 a_i 表示第 i 个需要释放的囚犯编号。

蓝色部分为释放囚犯 a_k 前所需最小代价,红色部分为释放囚犯 a_k 所需最小代价。

由于释放 a_k 会将全场分为 [i,k-1][k+1,j] 两个独立的区间,所以

为什么红色部分是 a_{j+1}-a_{i-1}-2 呢?

很简单,释放 a_k 时,需贿赂 [a_{i-1}+1,a_k-1]\cup[a_k+1,a_{j+1}-1] 的所有囚犯,代价为:

(a_k-a_{i-1}-1)+(a_{j+1}-a_k-1)=a_{j+1}-a_{i-1}-2

最后思考初始值,很明显:

答案为 dp_{1,Q},即释放区间 [1,Q] 内所有囚犯的最小代价。