简单组合计数

开个坑你先别急。

二项式反演

二项式反演包含两种常见的式子。

  • \(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)\) 就可以做了。

posted @ 2026-03-17 20:40  LoserBpds  阅读(5)  评论(0)    收藏  举报