考虑分别计算恰有 $i$ 中颜色恰出现 $S$ 次的方案数,记为 $f_i$,则答案为 $\sum_{i=0}^{m}{f_i w_i}$。 直接算 $f_i$ 不好算,考虑至少有 $i$ 中颜色恰出现 $S$ 次的方案数,记为 $g_i$,显然, $$g_i = C_{m}^{i} \frac{n!}{(n - iS)! (S!)^i} (m - i)^{n - iS}$$ 式子中的三项分别表示: “选出 $i$ 种颜色”,“选位置让这 $i$ 种颜色恰出现 $S$ 次”,“其余的随便填剩下的颜色”。 这个式子是会算重的。具体的,对于一种恰有 $j(j \ge i)$ 种颜色恰出现 $S$ 次的方案,它在 $f_i$ 中会被算 $C_j^i$ 次。于是, $$g_i = \sum_{j=i}^{m}{C^i_j f_j}$$ 根据二项式反演有, $$f_i = \sum_{j=i}^{m}{C^i_j g_j (-1)^{j-i}}$$ 至此我们有了 $O(m^2)$ 的算法。
二项式反演是可以化成卷积形式的, $$f_i = \sum_{j=i}^{m}{C^i_j g_j (-1)^{j-i}}$$ $$\rightarrow \quad f_i = \frac{1}{i!} \sum_{j=i}^{m}{\frac{j!}{(j-i)!} g_j (-1)^{j-i}}$$ 下边懒得打这个 $\frac{1}{i!}$。 令 $A_i = i!g_i \, , \, B_i = \frac{(-1)^{i}}{i!}$ 则, $$f_i = \sum_{j=i}^{m}{A_{j} B_{j-i}}$$ 这里涉及差卷积,令 $A'_i = A_{m-i} \, , \, f'_i = f_{m-i}$ (也就是翻转)则, $$f'_{m-i} = \sum_{j=i}^{m}{A'_{m-j} B_{j-i}}$$ 再令 $t=j-i$ 有, $$f'_{m-i} = \sum_{t=0}^{m-i}{A'_{m-i-t} B_{t}}$$ 也就是, $$f'_{i} = \sum_{t=0}^{i}{A'_{i-t} B_{t}}$$ 这就是标准卷积形式,使用 $NTT$ 即可。$(1004535809=479 \times 2^{21} +1)$ 值得注意的是,上述变形没有用到关于 $f_i$ 或 $g_i$ 的性质,于是对任何二项式反演均成立。
题目2939 [HAOI 2018]染色
10
评论
2023-02-01 20:09:26
|