题解:P14508 猜数游戏 guess【背包,最短路】

· · 题解

考虑第一次获得的有效信息,一定是对于某个 x\in[1,n),得知目标位置在 [1,x] 还是 (x,n],发现可以递归到子问题。

于是,设 f(i,0/1) 表示:得知目标位置在 [1,i] 后,当前棋子在 1i+1,的最小答案。

转移有:

f(i,0)\gets \min_{x=1}^{i-1} \{\max\{f(x,1),f(i-x,0)\}+w(x)\} \\ f(i,1)\gets \min_{x=1}^{i-1} \{\max\{f(x,0),f(i-x,1)\}+w(x)\} 分析一下复杂度。目前**在 DP 转移中**能用到的 $w(x)$ 的定义域是 $O(n)$ 的,对于 $w(x)$ 的某种移动方案,一定可以交换移动顺序(两个方向交替排列),使得**每一步**距离起点都是 $O(n)$ 的。因此**预处理**用到的 $w(x)$ 的定义域也是 $O(n)$。 目前复杂度为 $O(T(n^2+nm))$。常数略微大一点就过不了了。 记 $V=\max a$,假设当前问题为 $f(i,0)$,如果棋子往中间移动了 $>V$ 的距离,那么在获得这一信息之前,一定存在一个 $\le V$ 的移动距离已经获得信息了,因此 DP 转移可以写为: $$ f(i,0)\gets \min_{x=1}^{\min\{i-1,V\}} \{\max\{f(x,1),f(i-x,0)\}+w(x)\} \\ f(i,1)\gets \min_{x=1}^{\min\{i-1,V\}} \{\max\{f(x,0),f(i-x,1)\}+w(x)\} $$ 于是 $w(x)$ 的定义域被缩小到了 $O(V)$。总复杂度 $O(T(nV+mV))$,分别为 DP 和最短路的复杂度。 然后 $f$ 状态中的 $0/1$ 其实没什么用,可以直接记 $f(i)$,转移为: $$ f(i)\gets \min_{x=1}^{\min\{i-1,V\}} \{\max\{f(x),f(i-x)\}+w(x)\} $$