题意
给出排成一列的 \(n\) 个格子,你要从 \(1\) 号格子走到 \(n\) 号格子之后(相当于 \(n+1\) 号格子),一旦你走到 \(i+1\) 号格子,游戏结束。 当你在 \(i\) 号格子时,你有 \(p_i\) 的概率走到 \(i+1\) 号格子,否则你会返回最近的一个 checkpoint (存档点),最近的存档点是指 \(max\{x|x\leq i \; and \; ischeckpoint(x)\}\) 。对于每个 \(query x\) ,会把 \(x\) 号格子的 checkpoint 属性翻转,然后输出此时从 \(1\) 号格子走到 \(n+1\) 号格子的期望步数。
题解
考虑没有 checkpoint 的情况,也就是 2E 的题意。此时有两种比较好的解法:
- 设 \(dp_i\) 表示从 \(1\) 号格子开始,第一次走到 \(i\) 号格子所需的期望步数,则 \(dp_1=0\) ,所求为 \(dp_{n+1}\) 。
对于 \(i+1\) 号格子,走到它有两种可能:成功,从 \(i\) 号格子转移;失败,从 \(1\) 号格子转移。
\(dp_{i+1}=p_i(1+dp_i)+(1-p_i)(1+dp_i+dp_{i+1})\)
化简,即
\(dp_{i+1}=\frac{1}{pi}(1+dp_i)\)
递推可以求解。 - 设 \(dp_i\) 表示从 \(i\) 号格子开始,第一次走到 \(n+1\) 号格子所需的期望步数,则 \(dp_{n+1}=0\) ,所求为 \(dp_{1}\) 。
对于 \(i\) 号格子,下一步有两种可能:成功,转移到 \(i+1\) 号格子;失败,转移到 \(1\) 号格子。
\(dp_i=p_i(dp_{i+1}+1)+(1-p_i)(1+dp_1)\)
则有
\(dp_n=p_n(dp_{n+1}+1)+(1-p_n)(1+dp_1)\)
\(dp_{n-1}=p_{n-1}(dp_n+1)+(1-p_{n-1})(1+dp_1)\)
\(dp_{n-2}=p_{n-2}(dp_{n-1}+1)+(1-p_{n-2})(1+dp_1)\)
...
\(dp_3=p_3(dp_4+1)+(1-p_3)(1+dp_1)\)
\(dp_2=p_2(dp_3+1)+(1-p_2)(1+dp_1)\)
\(dp_1=p_1(dp_2+1)+(1-p_1)(1+dp_1)\)