Loading

概率期望进阶 + Min-Max容斥 练习题

Luogu5644 [PKUWC2018] 猎人杀

link

题意:有 \(n\) 个人,每次在剩下的人中选择一个人杀死,选择 \(i\) 的概率为 \(\dfrac{w_i}{\sum_j w_j}\),求第 \(1\) 个人是最后一个杀死的概率,答案对 \(998244353\) 取模。

\(w_i\ge 1,\space \sum\limits_{i=1}^n w_i\le 10^5\)

考虑容斥,枚举钦定在 \(1\) 之后死的人的集合 \(S\),那么该概率为 \(\dfrac {w_1}{w_1+\sum\limits_{j\in S}w_j}\),容斥系数为 \((-1)^{|S|}\)

使用背包来综合所有的 \(S\),设 \(f[i,j]\) 表示考虑了前 \(i\) 个人,\(\sum\limits_{x\in S}w_x=j\),带容斥系数的概率总和。

可以分治来卷积,时间复杂度 \(O(n\log^2 n)\)记录


CF1349D Slime and Biscuits

题意:有 \(n\) 个人,第 \(i\) 个人有 \(a_i\) 个饼干。每次随机选择一个饼干,将其随机分配给除了它现在所有者的其他 \(n−1\) 个人。求使得一个人拥有所有饼干的期望步数,对 \(998244353\) 取模。

\(1\le n\le 10^5,\space \sum\limits_{i=1}^n a_i\le 3\times 10^5\)

\(E_u\) 表示饼干全在第 \(u\) 个人手里并且由 \(u\) 结束的带概率系数期望步数。

我们要求的答案是 \(\sum\limits_{i=1}^n E_i\)。考虑计算 \(E_u\):设 \(D_u\) 表示不考虑之前是否已经结束,饼干全在第 \(u\) 个人手里的期望步数,\(P_u\) 表示在 \(u\) 结束的概率。

\[E_u=D_u-\sum_{v\not =u}(E_v+P_vC) \]

其中 \(C\) 表示饼干全部从 \(v\) 转移到 \(u\) 的期望步数,不难发现是个常数。

推式子

\[E_u=D_u-\sum_{v\not =u}E_v-C\sum_{v\not=u}P_v \]

\[\sum_{i=1}^n E_i=D_u-C\sum_{v\not=u}P_v \]

\[n\times ans=\sum_{i=1}^n D_i-C(n-1)\sum_{i=1}^n P_i \]

\[n\times ans=\sum_{i=1}^n D_i-C(n-1) \]

只需要求 \(D_{1...n},C\)

\(f[i]\) 表示一个人已经有了 \(i\) 个饼干,获得 \(i+1\) 个饼干的期望步数,这个随便推就行。

那么 \(D_i=f[a_i],\space C=f[0]\),时间复杂度 \(O(\sum a)\)记录


Luogu5463 随机游走

一棵 \(n\) 个点的树,一开始从 \(x\) 点出发随机游走。有 \(Q\) 次询问,每次给出一个点集 \(S\),求第一次经过 \(S\) 中所有点的期望时间。

\(1\le n\le 18,\space 1\le Q\le 5000\)

考虑 Min-Max 容斥,改为求第一次经过 \(S\) 中任意一个点的期望时间。

考虑预处理时枚举所有 \(S\),然后求解。设 \(f[u]\) 表示从 \(u\) 点开始走到 \(S\) 中任意一个点的期望时间,套路可知 \(f[u]\) 可以表示成关于 \(f[fa_u]\) 的一次函数。

令根为 \(x\),那么 \(f[x]\) 的常数项就是答案。

对于询问部分,我们可以预处理 sos dp 子集求和,时间复杂度 \(O(n(2^n+Q))\)记录


uoj449 【集训队作业2018】喂鸽子

link

题意:有 \(n\) 只鸽子,每秒会等概率选择一只鸽子并给他一粒玉米。一只鸽子饱了当且仅当它吃了的玉米粒数量
\(\ge k\)。求期望多少秒之后所有的鸽子都饱了。

\(1\le n\le 50,\space 1\le k\le 1000\)

Min-Max 容斥,转为求 \(t\) 个鸽子中把任意一个鸽子喂饱的期望秒数。

考虑 Gachapon 一题的方法,把喂食序列中这 \(t\) 个鸽子拎出来,是一个子序列。对于子序列的每个前缀,期望存在时间都是 \(\dfrac nt\),所以只需要求所有可能的前缀出现概率之和。

一个长度为 \(d\) 的前缀,合法的方案数为 \(1...t\) 的多重集排列数,其中每个数出现次数 \(\le k-1\)。总方案数为 \(k^d\),所以只需要求合法的长度为 \(d\) 的多重集排列数。

\(f[i,j]\) 表示前 \(i\) 个数组成大小为 \(j\) 的排列数方案数。

但是直接转移会超时,然后容斥也会超时。

考虑第 \(j\) 个数可以是 \(1...i\) 中任意一个,假设是 \(x\)。那么如果 \(j-1\) 个数中 \(x\) 出现次数 \(<k-1\) 时这样就合法;如果次数 \(=k-1\) 就不合法,考虑减去这个方案数,为 \({j-1 \choose k-1} f[i-1,j-k]\)

当然也可以生成函数推导,时间复杂度 \(O(n^2k)\)记录


uoj422【集训队作业2018】小Z的礼物

link

题意:一个 \(n\times m\) 的网格,有一些关键格。每次随机选择一个合法位置放置一个 \(1\times 2\) 的骨牌,可以重叠,求把所有关键格都覆盖的期望次数。

\(1\le n\le 6,\space 2\le m\le 100\)

Min-Max 容斥,转为求对于所有关键格集合,覆盖任意一个的期望次数。

用 dp 来综合所有集合。设 \(f[i,j,k,S]\) 表示考虑到了格子 \((i,j)\),有 \(k\) 个骨牌放置位置可以覆盖到选择的关键格,上方轮廓线为 \(S\) 的带符号方案数总和。

时间复杂度 \(O(n^2m^22^n)\)记录

posted @ 2024-03-19 21:52  Lgx_Q  阅读(15)  评论(0编辑  收藏  举报