组合数学

组合数学

前置知识

杂项

上指标前缀和:\(\sum_{i = 0}^n \binom{i}{m} = \binom{n + 1}{m + 1}\)

证明:

右边是 \(1 \sim n + 1\)\(m + 1\) 个的方案,考虑每次枚举最大值,就是左边的方案数。

范德蒙德卷积:\(\sum_{i = 0}^k \binom{m}{i} \binom{n}{k - i} = \binom{n + m}{k}\)

证明:

\(\sum_{k = 0}^{n + m} \binom{n + m}{k}x^k = (x + 1)^{n + m} = (x + 1)^n(x + 1)^m\)

然后再用二项式定理拆开即可证明。

从组合意义上考虑,相当于 \(n +m\) 个数中第一次选 \(i\) 个,第二次选 \(k - i\) 个的方案数的和。

Lucas 定理:在模 \(p\) 意义下,\(\binom{n}{m} = \binom{n \bmod p}{m \bmod p}\binom{n / p}{m / p}\),不会证明。

二项式反演

二项式反演:\(g_n = \sum_{i = 0}^n \binom{n}{i}f_i \Leftrightarrow f_n = \sum_{i = 0}^n(-1)^{n - i}\binom{n}{i}g_i\)\(g_k = \sum_{i = k}^n \binom{i}{k}f_i \Leftrightarrow f_k = \sum_{i = k}^n(-1)^{i - k}\binom{i}{k}g_i\)

证明:

这里仅对于第一个式子做出部分证明。

\[\begin{align} f_n &= \sum_{i = 0}^n(-1)^{n - i}\binom{n}{i}\sum_{j = 0}^i\binom{i}{j}f_j \\ &= \sum_{j = 0}^n\sum_{i = j}^n\binom{n}{i}(-1)^{n - i}\binom{i}{j}f_j \\ &= \sum_{j = 0}^n f_j \binom{n}{j} \sum_{i = j}^n (-1)^{n - i}\binom{n - j}{i - j} \\ &= \sum_{j = 0}^n f_j \binom{n}{j} \sum_{i = 0}^{n - j} (-1)^{n - i - j} 1^{i} \binom{n - j}{i} \\ &= \sum_{j = 0}^n f_j\binom{n}{j}[n = j] \\ &= f_n \end{align} \]

min-max 容斥

min-max 容斥:\(\underset{i\in S}{\max} x_i = \sum_{T \subseteq S} (-1)^{|T| - 1} \underset{j \in T}{\min}(x_j)\)\(\min\) 同理。

证明:

\(f : x \mapsto \{1, 2, \cdots, k\}\),其中 \(k\)\(x\) 在数组中的的位次。此时显然形成了一个双射。

\[\begin{align} f(\max x_i) &= \left |\bigcup f(x_i) \right | \\ &= \sum_{T \subseteq S} (-1)^{|T| - 1}\left |\bigcap f(x_j)\right | \\ &= \sum_{T \subseteq S} (-1)^{|T| - 1} f(\min x_j) \end{align} \]

比较重要的是 min-max 容斥可以推广到期望上,即有:

\[\begin{align} E(\max x_i) = \sum_{T \subseteq S}(-1)^{|T| - 1} E(\min x_j) \\ E(\min x_i) = \sum_{T \subseteq S}(-1)^{|T| - 1} E(\max x_j) \end{align} \]

还能够更加加强,有:

\[\operatorname{kthmin}(S) = \sum_{T \subseteq S} (-1)^{|T| - k} \binom{|T| - 1}{k - 1} \max(T) \\ \operatorname{kthmax}(S) = \sum_{T \subseteq S} (-1)^{|T| - k} \binom{|T| - 1}{k - 1} \min(T) \]

期望同理加强。

第二类斯特林数

定义 \(S(n, m)\)\(n\) 个不 同的数放入 \(m\) 个集合且集合非空的方案数,即第二类斯大林数。

则根据组合意义有递推式:\(S(n, m) = S(n - 1, m - 1) + mS(n - 1, m)\)

考虑将 \(n\) 个不同的数放入 \(m\) 个集合(可空)的方案数为 \(m^n\),同样可以是 \(\sum_{i = 0}^m\binom{m}{i}S(n, i)i!\)

二项式反演一下可以得到 \(S(n, m) = \sum_{i = 0}^m\frac{(-1)^{m - i}i^n}{i!(m - i)!}\)

喵喵题目

P7481

\[\begin{align} F(a, b) &= \sum_{i = 0}^b [\binom{b - 1}{i} + \binom{b - 1}{i - 1}][\binom{n - i + 1}{a + 1} -\binom{n - i}{a + 1}]\\ &= F(a, b - 1) + F(a + 1, b - 1) - \sum_{i = 0}^b \binom{b - 1}{i} \binom{n - i - 1}{a + 1} \\ &= F(a, b - 1) + F(a + 1, b - 1) - \sum_{i = 0}^b [\binom{b}{i + 1} - \binom{b - 1}{i + 1}]\binom{n - i - 1}{a + 1} \\ &= F(a, b - 1) - F(a + 1, b) + 2F(a + 1, b - 1) \end{align} \]

考虑将 \(F(a + 1, b)\) 移一下位置就可以递推了。需要线性求逆元。

loj6300

【题解】LOJ6300. 「CodePlus 2018 3 月赛」博弈论与概率统计 - はなこくん - 博客园

P4859

CSP2025T4 的套路。

先排序,考虑如果此时选了一个比 \(i\) 小的东西那么 \(i\) 往后的决策少了一种,否则就比较难办了。于是我们先钦定一些位置选择比自己大的。

\(f_{i, j}\) 为前 \(i\) 个其中 \(j\) 个位置选择了小的,转移 \(f_{i,j} \leftarrow f_{i - 1, j} + f_{i - 1, j - 1}(pre_i - j + 1)\),其中 \(pre_i\) 为比 \(a_i\) 小的 \(b\) 的数量。

\(g_i = (n - i)!f_{n, i}\),此时得到的答案是至少 \(i\) 个的。那么 \(g_k = \sum_{i = k}^n \binom{i}{k}ans_i\),二项式反演一下有 \(ans_k = \sum_{i=k}^n(-1)^{i - k}\binom{i}{k}g_i\)

P4707

【题解】P4707 重返现世 - はなこくん - 博客园

P6620

\[\begin{align} ans &= \sum_{i = 0}^m a_i \sum_{k = 0}^n k^i \binom{n}{k} x^k \\ &= \sum_{i = 0}^m a_i \sum_{k = 0}^n \binom{n}{k}x^k \sum_{j = 0}^k \binom{k}{j}S(i, j)j! \\ &= \sum_{i = 0}^m a_i \sum_{j = 0}^n S(i, j)j!\sum_{k = j}^n \binom{n}{k}\binom{k}{j} x^k \\ &= \sum_{i = 0}^m a_i \sum_{j = 0}^n S(i, j)j!\binom{n}{j}\sum_{k = j}^n \binom{n - j}{k - j}x^k \\ &= \sum_{i = 0}^m a_i \sum_{j = 0}^n S(i, j) \binom{n}{j} j! x^j \sum_{k = 0}^{n - j} \binom{n - j}{k} x^k \\ &= \sum_{i = 0}^m a_i \sum_{j = 0}^i S(i, j) \binom{n}{j} j! x^j (x + 1)^{n - j} \end{align} \]

即将 \(k^i\) 用第二类斯特林数拆开然后凑出一个二项式定理的形式优化计算。

直接递推求第二类斯特林数即可,\(O(m^2)\)

ARC118E

如果我们是确定了一个排列再计数路径那一次至少 \(O(n)\) 没什么前途,所以考虑以路径为主体。

直接做比较困难,我们考虑钦定一些点必须对应 \((i, p_i)\),可以进行容斥,容斥系数为 \((-1)\) 的钦定数次方。

\(f_{i, j, k, p, q}\) 为当前位于 \((i, j)\),钦定了 \(k\) 个点,当前行和当前列是否有选的系数和。最后还要再乘上 \((n - k)!\)

P3349

比较套路。

考虑状压,设 \(f_{x, y, S}\) 表示 \(x\) 对应到 \(y\)\(x\) 子树内的点对应集合 \(S\)

\(S\) 优化掉,我们考虑做一个容斥,令 \(f(S)\) 表示只用 \(S\) 中的点的方案数,那么 \(ans = \sum(-1)^{n - |S|}f(S)\)

CF1349D

ARC136F

P3179

AGC002F

AGC038E

posted @ 2025-11-19 19:10  はなこくん  阅读(3)  评论(0)    收藏  举报