概率与期望
期望 dp
普通期望 dp
CF1925D Good Trip
有 \(n\) 个同学,\(m\) 对朋友。起初,第 \(i\) 对朋友的友好值为 \(f_i\),非朋友的友好值为 \(0\)。
执行 \(k\) 次操作:
- 选中两个同学;
- 若他们是朋友,则将他们的友好值加上 \(1\)。
求每次操作前选中同学后选中同学的友好值的期望值之和。
\(n,m\leq 10^5\),\(k\leq 2\times 10^5\)。
概率期望好题。显然有 \(N=\dfrac{n(n+1)}{2}\) 对同学。
考虑初始值的贡献。 每次选中第 \(i\) 对朋友的概率是 \(\dfrac{1}{N}\),所以第 \(i\) 对朋友的贡献为 \(\dfrac{kf_i}{N}\)。所以所有朋友初始值的贡献为 \(\dfrac{k\sum f_i}{N}\)。
现在我们可以考虑友好值全为 \(0\) 的问题。每对朋友显然是独立的,可以分开计算。假设选中第 \(i\) 对朋友 \(x\) 次,贡献显然为 \(\frac{x(x-1)}{2}\)(注意贡献是在友好值自增之前计算的)。选中第 \(i\) 对朋友恰好 \(x\) 次的概率显然为 \({k\choose x}\left(\frac{1}{N}\right)^x\left(\frac{N-1}{N}\right)^{k-x}\),所以我们只需要计算
就可以得到第 \(i\) 个朋友的总贡献。注意到每对朋友的贡献相同,于是乘以 \(m\) 即可。
单次复杂度 \(\Theta(k\log p)\)。
P3239 [HNOI2015] 亚瑟王
环上的期望 dp
环上的期望 dp 一般有几种方法:
- 解出环中的一项递推
- Gauss 消元
- cdq 分治
[ABC333F] Bomb Game 2
有 \(n\) 个人排成一行。进行若干次操作,直到只剩下一个人:
-
以 \(\dfrac 12\) 的概率,将第一个人移出队列;
-
以 \(\dfrac 12\) 的概率,把第一个人挪到最后,其余人的位置向前移。
对于每个 \(1 \le i \le n\),求出第 \(i\) 个人最终在队列中的概率。\(n\leq 3000\)。
CF24D Broken Robot
\(n\) 行 \(m\) 列的矩阵,现在在 \((x,y)\),每次等概率向左,右,下走或原地不动,但不能走出去,问走到最后一行期望的步数。
\(n,m \leq 10^3\)。
设 \(f[i,j]\) 表示从 \((i,j)\) 走到最后一行的期望步数。
显然我们有
于是我们得到
这是一个有后效性的方程,但是我们可以通过直接 Gauss 消元,得到最优解。
注意到每行只有两三个位置需要相减,故 Gauss 消元的时间复杂度是 \(\Theta(m)\) 的。于是我们就在 \(\Theta (nm)\) 即约平方的复杂度内解决了此题。
初值:\(\forall j\in [1,m], f[n][j]=0\)
答案:\(f[x][y]\)
注意特判 \(m=0\) 的情况。
CF963E Circles of Waiting
一个动点初始在原点处,每次以 \(p_1\) 的概率向左移动一格,\(p_2\) 的概率向下移动一格,\(p_3\) 的概率向右移动一格,\(p_4\) 的概率向上移动一格。求移到距离原点大于 \(r\) 的点的期望步数。
\(r\leq 50\)。
设 \(f[i,j]\) 为从 \((i,j)\) 走到符合条件的点的期望步数。我们显然有
有 \(\Theta(r^2)\) 个点,朴素的 Gauss 消元为 \(\Theta(r^6)\) 无法通过。然而,我们有两种优化。
主元法
对转移方程变形,得到
注意到 \(f[i+1,j]\) 只和其左边的点有关。于是我们选定每一行最左边的离原点距离小于等于 \(r\) 的点作为主元,对每一个点 \((i,j)\),我们可以由转移方程推出一个向量 \((a_1,a_2,a_3,\cdots,a_{2r+1},b)\),表示 \(f[i,j]=b+\sum_{i=1}^{2r+1}a_ix_i\)。我们选出 \(2r+1\) 个离远点大于 \(r\) 的点,此时显然有 \(f[i,j]=b+\sum_{i=1}^{2r+1}a_ix_i=0\)。由此可以解出 \(2r+1\) 个主元,然后直接代入 \((0,0)\) 对应的向量求解即可。
时间复杂度 \(\Theta(r^3)\),可以通过。
P6125 [JSOI2009] 有趣的游戏
给定 \(n\) 个长度为 \(m\) 的字符串 \(P_i\),字符集 \(|\Sigma|=l\)。
初始时有一个空字符串 \(S\)。每次 以 \(p_i\) 的概率选取字符 \(i\) 加到 \(S\) 的尾部。当存在 \(i\in [1,n]\),使得 \(P_i\) 是 \(S\) 的子串时停止这个过程,我们称为在 \(i\) 处停止。对于 \(i\in [1,n]\),求在 \(i\) 处停止的概率。
\(n,m,l\leq 10\)。
建出 \(P_i\) 的 AC 自动机。此时问题转化为:
给定有向图 \(G\),初始你在 \(0\) 号点处。每条出边有 \(p_i\) 的概率被选取(保证每个节点的出边概率之和为 \(1\)),每次选取一条出边走到下一个节点。有一些关键点,走到关键点后停止。求走到每个关键点的概率。
既然是概率,考虑正推。设 \(f[u]\) 为从起点走到 \(u\) 的概率,初始值为 \(f[s]=1\)。我们有如下的转移:
转移可能成环,Gauss 消元即可。时间复杂度 \(\Theta(n^3m^3)\),可以通过。
P4457 [BJOI2018] 治疗之雨
待补。
概率生成函数(PGF)
设 \(X\) 为仅取非负整数值的随机变量。定义 \(X\) 的概率生成函数(PGF)为
显然有 \(\sum_{k\geq 0} P(x=k)=1\),即 \(G_X(1)=1\)。
PGF 与数学期望
进一步有
PGF 与方差
我们只需要知道 \(G''(1)\) 和 \(G'^2(1)+G'(1)\) 即可求出方差。
PGF 与卷积
设 \(X,Y\) 为仅取非负整数值的随机变量,且相互独立。那么显然有
显然是一个卷积的形式,所以我们得到了
P3706 [SDOI2017] 硬币游戏
给定 \(n\) 个长度为 \(m\) 的字符串 \(P_i\),字符集 \(\Sigma=\{\texttt{0},\texttt{1}\}\)。
初始时有一个空字符串 \(S\)。每次等概率随机选取 \(\texttt{0}\) 或 \(\texttt{1}\) 加到 \(S\) 的尾部。当存在 \(i\in [1,n]\),使得 \(P_i\) 是 \(S\) 的子串时停止这个过程,我们称为在 \(i\) 处停止。对于 \(i\in [1,n]\),求在 \(i\) 处停止的概率。
\(n,m\leq 300\)。
本题即为 P6125 的加强版。\(\Theta(n^3m^3)\) 只能通过 \(40\%\) 的数据(不能通过 \(60\%\) 的数据的原因是,精度问题)。