AT_agc038_e [AGC038E] Gachapon 题解
AT_agc038_e [AGC038E] Gachapon 题解
这个是 min-max 容斥和尾和公式的集成。
首先对于所有 \(i\) 的出现次数不少于 \(B_i\),我们直接应用 min-max 容斥,求出所有 \([1,n]\) 的子集 \(T\),然后需要求出存在 \(i\) 出现次数不少于 \(B_i\) 的答案,然后利用尾和公式,因为我们的操作次数是无限的,所以我们使用不传统的尾和公式,使用
\[\mathbb{E}[X]=\mathbb{E}[X|Y=0]+\sum_{t \ge 0}\Pr(Y>t)(\mathbb{E}[X|Y=t+1]-\mathbb{E}[X|Y=t])
\]
这里我们的 \(Y\) 就设定为停止的时候 \(T\) 之内数的出现次数之和,首先对于 \(\mathbb{E}[X|Y=t+1]-\mathbb{E}(X|Y=t)\) ,就是出现次数之和增加一的期望步数,根据经典结论,出现一个集合内数的概率为 \(p = \dfrac{\sum_{i \in T}a[i]}{\sum_{i}a[i]}\) ,那么单步期望就是 \(\dfrac{1}{p}=\dfrac{\sum_{i}a[i]}{\sum_{i\in T}a[i]}\),以及 \(\Pr(Y > t)\),就是我们可以先存放 \(t\) 个集合内的数,然后其它的随便填的概率。 那么现在直接给出全套式子
\[\text{Answer}=\sum_{\varnothing \neq T \subseteq S}(-1)^{|T|+1}\dfrac{\sum_{i}a[i]}{\sum_{i\in T}a[i]}\sum_{\forall i \in T, cnt_i < B_i} \frac{(\sum_{i \in T}cnt_i)!}{\prod_{i \in T}cnt_i!} \prod_{i \in T}(\frac{a[i]}{\sum_{i \in T}a[i]})^{cnt_i}
\]
这个看着十分吓人,但是我们化简一下
\[\text{Answer}=\sum_{\varnothing \neq T \subseteq S}(-1)^{|T|+1}\dfrac{\sum_{i}a[i]}{\sum_{i\in T}a[i]}\sum_{\forall i \in T, cnt_i < B_i} \frac{(\sum_{i \in T}cnt_i)!}{\prod_{i \in T}cnt_i!} \prod_{i \in T}a[i]^{cnt_i} \cdot (\frac{1}{\sum_{i \in T}a[i]})^{\sum_{i \in T}cnt_i}
\]
然后我们发现其实有很多地方是相同的,例如 \(\sum_{i \in T}cnt_i\) 和 \(\sum_{i \in T}a[i]\),我们直接可以把它放进dp状态里面,剩余部分其实只有
\[\sum_{\varnothing \neq T \subseteq S}(-1)^{|T|+1}\sum_{\forall i \in T, cnt_i < B_i} \frac{1}{\prod_{i \in T}cnt_i!} \prod_{i \in T}a[i]^{cnt_i}
\]
是变化的于是令 \(dp_{i,j,k}\) 表示当处理到 \(i\) 时,\(\sum_{i \in T}cnt_i = k,\sum_{i \in T}a[i]=j\) 的概率为多少,我们直接暴力枚举 \(cnt_i\),因为 \(\sum_{i}cnt_i\) 只有 400,时间复杂度 \(O(n^3)\)。

浙公网安备 33010602011771号