简单组合计数
开个坑你先别急。
二项式反演
二项式反演包含两种常见的式子。
- \(g_n = \sum_{i = 0}^{n} \dbinom{n}{i} f_i\iff f_n = \sum_{i = 0}^{n} (-1)^{n-i}\dbinom{n}{i} g_i\)
- \(g_k=\sum_{i=k}^n \dbinom i k f_i \iff f_k=\sum_{i=k}^n (-1)^{i-k} \dbinom i k g_i\)
容斥原理
两种常见的表达。分别是求空集和非空的集合。
- \([S = \phi] = \sum_{T \subseteq S} (-1)^{|T|}\)
- \([S \ne \phi] = \sum_{\phi\ne T \subseteq S} (-1)^{|T| + 1}\)
事实上,我们可以考虑每种情况对应的容斥系数。设它的贡献为 \(V(T)\),则对答案的贡献为 \(V(T) \times (-1)^{|T| + 1}\) 或 \(V(T) \times (-1)^{|T|}\)。注意求非空的集合时,\(\phi\) 是不算贡献的。
题目
P5505 [JSOI2011] 分特产
发现满足至少分一个不好做,于是考虑一个都不分的情况,从容斥入手,其实不用生成函数。我们令 \(g(i)\) 表示至少有 \(i\) 个人未分得的情况总数,通过容斥原理容易得出答案为 \(g(0) - g(1) + g(2) - g(3) + \dots\)。考虑怎么求 \(g(i)\)?暴力一点,假设已经知道了最终的人选,个数为 \(n - i\),则枚举每种特产,然后相当于做一个可以分配可以为 \(0\) 的插板法,贡献为 \(\binom{a_k + n - i - 1}{n - i - 1}\),累乘即可。在对于 \(g(i)\) 乘上最终人选的方案数为 \(\binom{n}{n - i}\) 即可。
CF660E Different Subsets For All Tuples
比较好的方法是考虑对每一种子序列算贡献。如何不算重复?方法是计算最先出现的数字。序列的长度为 \(i = 1 \sim n\) 显然要枚举,然后因为它是跟位置有关系的,于是再枚举该序列的最后一个元素出现的位置即为 \(j\),确定序列元素在原来的数组中的下标有一个组合系数 \(\binom{j - 1}{i - 1}\),序列中的 \(i\) 个元素的大小显然有 \(m^{i}\) 种,但是若下标在 \([1, j]\) 但不属于序列中的元素每个就只有 \(m - 1\) 种选择,因为他们是不能跟序列中下一个出现的元素相同的,否则显然可以更提前。然后化简这个式子,发现他有一个组合系数并且每种对应的幂的和相加为定值,很像二项式定理!提出之后为二项式定理形式,\(O(n)\) 就可以做了。

浙公网安备 33010602011771号