ARC110D

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)\) 计算组合数即可。

posted @ 2026-01-13 21:24  xiehanrui0817  阅读(6)  评论(0)    收藏  举报