ABC241H Card Deck Score 题解
有 \(N\) 种牌,第 \(i\) 种牌有 \(B_i\) 张,每张权值为 \(A_i\),请从 \(\sum B_i\) 张牌中选出 \(M\) 张牌,每一种选择方案的贡献为所有牌的权值之积,求所有方案的贡献之和,对 \(998244353\) 取模。
\(N \le 16, M \le 10^{18},1 \le A_i \le 998244353, 1 \le B_i \le 10^{17}, M \le \sum B_i\),保证 \(A_i\) 互不相同。
数学
生成函数
这个题又告诉我,我的生成函数有多么弱/kk。
考虑对于每一个牌写出生成函数:
\[F_i(x) = \sum_{j = 0}^{B_i} A_i^{j}x^j = \frac{1 - A_i^{B_i + 1}}{1-A_ix}
\]
于是我们要求的答案就是:
\[[x^m]\prod_i F_i(x) = [x^m]\frac{\prod_i 1 - A_i^{B_i + 1}}{\prod_i 1 - A_ix}
\]
因为 \(N\) 比较小,于是我们可以轻松地通过枚举子集求出分子部分。
现在重点求分母部分:
因为除法不是很好解决的,于是我们可以将 \(\frac{1}{\prod_i 1 - A_ix}\) 尝试化成: \(\sum_i \frac{c_i}{1 - A_ix}\),这样就可展开成为 \(\sum_i c_i \sum_{t = 0}^{\infty} A_i^tx^t\)。
现在,有等式:
\[\frac{1}{\prod_i 1 - A_ix} = \sum_i \frac{c_i}{1 - A_ix}
\]
我们可以同时乘上 \(\prod_i 1 - A_ix\),然后就是:
\[1 = \sum_i c_i \prod_{j \neq i} (1 - A_jx)
\]
我们尝试代入特殊值,将 \(x = A_1^{-1}, A_2^{-1}, \dots,A_n^{-1}\)代入原式,然后我们会发现:
\[c_i = \frac{1}{\prod_{j \neq i} 1 - A_jA_i^{-1}}
\]
然后就求出分子了,将两个生成函数相乘然后求 \(x^m\) 的系数即可。
本博客作者:Werner_Yin(https://www.cnblogs.com/werner-yin/) ,转载时请注明出处,谢谢支持!