书
不知道原题解在说什么?结果发现这不就一简单题,改题的难度在于题解。
定义一个状态二元组 \((i,j)\) 表示当前栈顶书本大小为 \(i\),书本厚度和为 \(j\)。
设 \(nxt(i,j)\) 为在 \((i,j)\) 状态时加入一本书的状态的可重集。容易发现所有状态构成一棵树。
记 \(F=\sum\limits_{t\in nxt(s)} f_s,G=\sum\limits_{t\in nxt(s)} g_s\)。
定义 \(g_{i,j}\) 表示在状态 \((i,j)\) 时,之后有多少的概率在 \((i,j)\) 处进行一次弹栈操作。
当 \(j>w\) 时 \(g_{i,j}=0\);否则设有 \(c\) 个书本大小比 \(i\) 小,记 \(s=(i,j)\),则:
实际意义比较简单,就是考虑进到某个儿子中还有多少概率弹栈回来。
定义 \(f_{i,j}\) 表示在状态 \((i,j)\) 时,离开以 \((i,j)\) 为根的状态树的子树的期望步数,答案就是 \(f_{\infty,0}\)。
当 \(j>w\) 时 \(f_{i,j}=0\);否则设有 \(c\) 个书本大小比 \(i\) 小,记 \(s=(i,j)\),则:
实际意义比较简单,就是如果弹栈了就离开子树了;否则进入到某个儿子后离开儿子子树需要 \(f_t\) 的代价,其中 \(g_t\) 的概率是通过弹栈回到了 \(s\) 状态。这里实际上 \(f_t\) 和 \(g_t\) 不是独立的,但是根据期望的线性性是可以这样拆的。
题解中的 \(f\) 定义不同,我觉得它完全错。
题解最后几行把 \(c+1\) 当做 \(c\) 了。于是应当是
-
将计数器加上 \(1+\dfrac{F}{c+1}\)。
-
期望随机次数是 \(w=1+(1-\dfrac{P+1}{c+1})w\) 解得 \(w=\dfrac{c+1}{P+1}\)。
-
期望值是 \((1+\dfrac{F}{c+1})\times\dfrac{c+1}{P+1}=\dfrac{c+1+F}{P+1}\)。