ARC110D
给定一个长度为 \(n\) 的非负整数 \(a\)。
计算所有满足总和不超过 \(m\) 的 \(n\) 个非负整数序列 \(B\) 的 \(\prod\limits_{i= 1}^n \binom{b_i}{a_i}\),并将结果对 \(10^9 + 7\) 取模后输出。
\(n, a_i \le 2000, m \le 10^9\)
处理组合数 \(\binom{n}{m}\) 一般有两种方式:\([x^m](1 + x)^n, [x^{n - m}]\frac{1}{(1 - x)^{m + 1}}\),一般 \(n\) 为常数使用前者,\(m\) 为常数使用后者,就是尽量让这个关于 \(x\) 的多项式的指数确定的(\(n/m + 1\) 确定。)
\[\begin{aligned}
\sum\limits_{b_1 + b_2 + \dots b_n \le m} \ \prod\limits_{i = 1}^n \binom{b_i}{a_i} &= \sum\limits_{b_1 + b_2 + \dots b_n \le m} \prod\limits_{i = 1}^n [x^{b_i - a_i}]\frac{1}{(1 - x)^{a_i + 1}} \\
&= \sum\limits_{S \le m} [x^{S - a_1 - a_2 - \cdots}] \prod\limits_{i = 1}^n \frac{1}{(1 - x)^{a_i + 1}} \\
&= [x^{m - a_1 - a_2 - \cdots}]\dfrac{1}{(1 - x)^{(a_1 + 1) + (a_2 + 1) + \dots + (a_n + 1) + 1}} \\
&= \binom{m + n}{m - a_1 - a_2 - \dots - a_n} \qquad \ = \binom{m + n}{a_1 + a_2 + \dots + a_n + n}
\end{aligned}
\]
可以通过 \(O(\sum A + n)\) 计算组合数即可。
浙公网安备 33010602011771号