AGC038E

题面

有一个随机数生成器,生成 \([0,n-1]\) 之间的整数,其中生成 \(i\) 的概率为 \(\frac{A_i}{S}\),其中,\(S=\sum A_i\)

这个随机数生成器不断生成随机数,当 \(\forall i\in[0,n-1]\)\(i\) 至少出现了 \(B_i\) 次时,停止生成,否则继续生成。

求期望生成随机数的次数,输出答案对 \(998244353\) 取模的结果。

数据范围:\(A_i,B_i\geq 1\)\(\sum A_i,\sum B_i,n\leq 400\)

题解

第一次做 \(\min-\max\) 容斥题....

要知道 \(\min-\max\) 容斥到底在干什么。

我们记 \(a_i\) 表示第 \(i\) 个条件满足的时间,那么这里就是要求 \(E(\max_{i=1}^n(a_i))\)

然后已知:\(E(\max(S))=\sum\limits_{T\subseteq S}(-1)^{|T|+1}E(\min(T))\) ,那么我们就可以转换成求 对于每一个子集 \(T\) ,求存在一个元素满足条件的期望步数。

但是这里 \(n\) 很大啊,是不是没法做了?

其实没有关系,因为我们可以通过dp转移!

所以现在还是要老老实实推对于一个子集 \(T\) 的答案是什么。

这里我们终于可以枚举步数了,因为这很明显是有限的。

考虑对于 \(T\) 来说,\(E(\min(T))=\sum_\limits{i=1}^{\sum B_i}f(i)\) ,其中 \(f(i)\) 的含义就是 \(i\) 次之后 \(T\) 中还是没有一个元素满足的概率。

注意,这个式子是不对的,因为我们无法保证每次都能选到 \(T\) 中的元素,所以还要答案还要乘上 \(\frac{S}{\sum A_i}\)\(S\) 就是全部的 \(A_i\) 和。

考虑 \(f(x)\) 怎么求?

\[\begin{aligned} f(x)=&\sum_{\sum c_i=x,0<c_i< b_i}\prod_i\left(\frac{A_i}{\sum A_j}\right)^{c_i}\frac{x!}{\prod_i c_i!}\\ =&\left(\sum A_j\right)^{-x}x!\sum_{\sum c_i=x}\prod_i\frac{(A_i)^{^{c_i}}}{c_i!} \end{aligned} \]

发现转换成这样之后我们就可以dp求了!

\(f_{i,j,k}\) 表示考虑到第 \(i\) 个元素时,\(\sum A_i=j,\sum c_i=k\) 的容斥权值和(带上了 \((-1)^{|T|+1}\) 的系数)

转移的时候我们就枚举这个元素选不选,选的话 \(c_i\) 为几。可以列转移式:

\[f_{i,j,k}=f_{i-1,j,k}-\sum_{p=0}^{b_i-1} f_{i-1,j-a_i,k-p}\times (A_i)^{p}p! \]

为什么中间是 \(-\)

因为根据容斥,没选一个新的,对应的 \(|T|\)\(1\) ,那么 \((-1)^{|T|+1}\) 就会变号。

还有!初值 \(f_{0,0,0}=-1\) !因为 \((-1)^{|\varnothing|+1}=-1\)

但是这个dp是不是 \(O(n^4)\) 的?其实不是,因为 \(\sum b_i=400\) ,所以其实是 \(O(n^3)\) 的。

启发

  • "对于多个元素要满足条件,求所有元素都满足的期望 " 这种问题要考虑 \(\min-\max\) 容斥转换成可以在有限步数内枚举的 "任意一个元素满足" 问题!
  • 即使容斥时元素个数很多,也是可以用 dp 得到所有权值和的。
  • 容斥时 dp 的初值需要注意。
posted @ 2022-07-11 21:28  qwq_123  阅读(61)  评论(0编辑  收藏  举报