组合数学
一些必要 trick
- 推式子,先提 \(\sum\) 和 \(\Pi\) 到最前面,然后从后往前合并,必要时考虑更改 \(\sum\) 的取值
- 看到次方变为斯特林数,\(x^n=\sum\limits_{i=0}^{x} {n \brace i}{x \choose i}i!=\sum\limits_{i=0}^{x}\sum\limits_{i=1}^n{(-1)^{n-i}\frac{i^n}{(n-i)!}}{x \choose i}\)
- 注意莫反、欧反的形式
推式子基本原理
- 先把 \(\sum\) 移到最前面。
- 将多个 \(\sum\) 排序,范围更小的放在前面。
- 将只与当前 \(\sum\) 有关的式子尽量往前提。
- 将能简化式子的特殊边界提出来。
- 从后往前处理。
基本概念
- \(a^{\underline m}\) 表示 \(a\) 的 \(m\) 次下降幂。
- \(a^{\overline m}\) 表示 \(a\) 的 \(m\) 次上升幂。
递推式
\[{n \choose m}={n-1 \choose m}+{n-1 \choose m-1} \\
\]
证明
从组合意义上推导,在 n 个人中选 m 个相当于单独考虑最后一人,若他要选,则为 \({n-1 \choose m-1}\) 他不选则为 \({n-1 \choose m}\)。
吸引/相伴等式
\[\begin{aligned}
\frac{n \choose m}{n-1 \choose m-1}&=\frac{n}{m} \\
\frac{n \choose m}{n-1 \choose m}&=\frac{n}{n-m} \\
\frac{n \choose m}{n \choose m-1}&=\frac{n-m+1}{m} \\
\end{aligned}
\]
另外的形式:
\[\begin{aligned}
k {n \choose k}&= n {n-1 \choose k-1} \\
(n-k){n \choose k}&= n{n-1 \choose k}
\end{aligned}
\]
上指标反转
\[{n \choose m}=(-1)^m{m-n-1 \choose m}
\]
证明
\[\begin{aligned}
{n \choose m}=\frac{n^{\underline{m}}}{m!}&=\frac{n\times(n-1)\times (n-2)\times...\times (n-m+1)}{m!} \\
&=\frac{(-1)^m\times (-n)\times(1-n)\times...\times(m-n-1)}{m!} \\
&=\frac{(-1)^m\times (m-n-1)^{\underline{m}}}{m!} \\
&=(-1)^m{m-n-1 \choose m}
\end{aligned}
\]
三项式系数恒等式
\[{n \choose m}{m \choose k}={n \choose k}{n-k \choose m-k}
\]
等式两边拆开约分即可得证。
平行求和
\[{n \choose 0}+{n+1 \choose 1}+...+{n+m \choose m} \\
=\sum\limits_{i = 0}^{m}{n+i \choose i}={n+m+1 \choose m} \\
m \in \mathbb{N}
\]
证明
将 \({n+m+1 \choose m}\) 用加法公式展开即可。
上指标求和
\[\sum\limits_{i = 0}^{n}{i \choose m}={n+1 \choose m+1}
\]
证明
从组合意义入手,相当于我从 \(n+1\) 个数中选 \(m+1\) 个数,先假设选 \(i\),那么 \(i\) 前面还需要选 \(m\) 个数,枚举这个 \(i\),即为答案。
也可通过微积分求导知识进行证明,这里不再详述。
练习一
求 \(\sum\limits_{i=0}^{m}{n+i \choose i}\)
解
\[\begin{aligned}
\sum\limits_{i = 0}^{m}{n+i \choose i}&=\sum\limits_{i = 0}^{m}{n+i \choose n+i-i} \\
&=\sum\limits_{i = 0}^{m}{n+i \choose n} \\
&={n+m+1 \choose n+1}
\end{aligned}
\]
下指标求和(整行)
\[\sum\limits_{i = 0}^{n}{n \choose i}= 2^n
\]
证明
\[\begin{aligned}
\sum\limits_{i = 0}^{n}{n \choose i}&=\sum\limits_{i = 0}^{n}{n \choose i}1^{n-i}1^i \\
&=(1+1)^n = 2^n
\end{aligned}
\]
交错求和
\[\sum\limits_{k = 0}^{m}(-1)^k{n \choose k}=(-1)^m{n-1 \choose m}, m\in \mathbb{Z}
\]
证明
\[\begin{aligned}
\sum\limits_{k = 0}^{m}(-1)^k{n \choose k}&=\sum\limits_{k = 0}^{m}{k-n-1 \choose k} \text{上指标反转} \\
&={m-n \choose m} \text{平行求和} \\
&=(-1)^m{n-1 \choose m} \text{上指标反转}
\end{aligned}
\]
下指标卷积(范德蒙德卷积)
\[\sum\limits_{i = 0}^k{n \choose i}{m \choose k-i}={n+m \choose k}
\]
证明
从 \(n\) 个数中选 \(i\) 个数,再从 \(m\) 个数中选 \(k-i\) 个数,相当于从 \(n+m\) 个数中选 \(k\) 个数。
练习二
求 \(\sum\limits_{i=0}^{m}{n \choose i}{m \choose i}\)
解
\[\begin{aligned}
\sum\limits_{i = 0}^{m}{n \choose i}{m \choose i}&=\sum\limits_{i = 0}^{m}{n \choose i}{m \choose m-i} \\
&={n+m \choose m}
\end{aligned}
\]
上指标卷积
\[\sum\limits_{i = 0}^{n}{i \choose a}{n-i \choose b}={n+1 \choose a+b+1}
\]
证明
相当于从左边 \(i\) 个中选 \(a\) 个,右边 \(n-i\) 个中选 \(b\) 个。等于从 \(n\) 个中选 \(a+b\) 个,枚举分割点 \(i\)。
练习三
求 \(\sum\limits_{i=m}^{n}(-1)^i{n \choose i}{i \choose m}\)
解
\[\begin{aligned}
\sum\limits_{i = m}^{n}(-1)^i{n \choose i}{i \choose m}&=\sum\limits_{i = m}^{n}(-1)^i{n \choose m}{n-m \choose i-m} \\
&={n \choose m}\sum\limits_{i = m}^{n}(-1)^i{n-m \choose i-m} \\
&={n \choose m}\sum\limits_{i = 0}^{n-m}(-1)^{i+m}{n-m \choose i} \\
&={n \choose m}(-1)^m\sum\limits_{i = 0}^{n-m}(-1)^{i}{n-m \choose i}\times 1^{n-m-i} \\
&={n \choose m}(-1)^m 0^{n-m} \\
&=(-1)^m [n = m] \\
\end{aligned}
\]
例题:P2791 幼儿园篮球题
至此,组合数学的基本内容已结束。
总结如下图:

Lucas 定理
\[{n \choose m}\equiv{\lfloor \frac{n}{p} \rfloor \choose \lfloor \frac{m}{p} \rfloor}{{n\bmod p}\choose {m \bmod p}}\pmod p \\
\]
其中 \(p\) 为质数。
证明
注意到 \({p \choose n}\equiv[n=p \lor n=0]\pmod p\),
因此 \((a+b)^p\equiv a^p+b^p \pmod p\)。
对于 \(f(x)=(1-x)^n,f[x](x^m)={n \choose m}\)。
我们现在对 \(f(x)\) 做一点变换,
\[\begin{aligned}
f(x)&=(1+x)^n \\
&=(1+x)^{p\times\lfloor\frac{n}{p}\rfloor}(1+x)^{n \bmod p} \\
&=((1+x)^p)^{\lfloor\frac{n}{p}\rfloor}(1+x)^{n \bmod p} \\
\end{aligned}
\]
\[f(x)\equiv (1+x^p)^{\lfloor\frac{n}{p}\rfloor}(1+x)^{n \bmod p} \pmod p
\]
所以对于 \(f(x)\),前半部分 \(((1+x)^p)^{\lfloor\frac{n}{p}\rfloor}\) 一定为 \(p\) 的倍数,后半部分 \((1+x)^{n \bmod p}\) 一定小于 \(p\) ,设 \(h(x)=(1+x^p)^{\lfloor\frac{n}{p}\rfloor}\) , \(g(x)=(1+x)^{n \bmod p}\)。
\(f[x](x^m)=h[x](x^{kp})\times g[x](x^{r}) \pmod p\)
所以就有 \(m=kp+r\rightarrow k=\lfloor \frac{m}{k}\rfloor,r=m\bmod p\)。
就可以得出:
\[{n \choose m}\equiv{\lfloor \frac{n}{p} \rfloor \choose \lfloor \frac{m}{p} \rfloor}{{n\bmod p}\choose {m \bmod p}}\pmod p \\
\]
二项式定理
\[(x+y)^n =\sum\limits_{i = 0}^{n}{n \choose i}x^{n-i}y^i
\]
拓展——下降(上升)幂二项式定理
\[(x+y)^{\underline{n}}=\sum\limits_{i = 0}^{n}{n \choose i}x^{\underline{n-i}}y^{\underline{i}} \\
(x+y)^{\overline{n}}=\sum\limits_{i = 0}^{n}{n \choose i}x^{\overline{n-i}}y^{\overline{i}} \\
\]
证明(这里不用数学归纳法进行证明)
\[\begin{aligned}
\sum\limits_{i = 0}^{n}{n \choose i}x^{\overline{n-i}}y^{\overline{i}}&=\sum\limits_{i = 0}^{n}\frac{n!}{(n-i)! i!}x^{\overline{n-i}}y^{\overline{i}} \\\\
&=\sum\limits_{i = 0}^{n}n!\frac{x^{\overline{n-i}}y^{\overline{i}}}{(n-i)! i!} \\
&= n!\sum\limits_{i = 0}^{n}{x \choose i}{y \choose n-i} \\
(\text{根据范德蒙德卷积})&= n!{x+y \choose n} \\
&=(x+y)^{\underline{n}} \\
\end{aligned}
\]
上升幂方法相同。
错排
定义:一个满足 \(a_i\ne i\) 的序列。
推导式:
\[f_n =(n-1)(f_{n-1}+f_{n-2})
\]
证明
若当前将 \(1\) 放到位置 \(k(k\ne 1)\),那么 \(k\) 的放置位置可以分类讨论:
-
\(k\) 放在位置 \(1\) 上,那么还会剩下 \(n-2\) 个数错排,方案数为 \(f_{n-2}\)。
-
\(k\) 放到某个位置 \(t(t\ne 1)\),那么假设 \(1\) 号位置填上了 \(P\),则 \(p\ne 1 \land p\ne k\),此时可以考虑一个新序列,把 \(1\) 去掉,此时方案数为 \(f_{n-1}\)
例题:P7438 更简单的排列计数
设 \(\text{cyc}_\pi\) 将长为 \(n\) 的排列 \(\pi\) 当成置换时所能分解成的循环个数。给定两个整数 \(n,k\) 和一个 \(k-1\) 次多项式,对 \(1\leq m\leq n\) 求:
\[\sum\limits_{\pi}F(\text{cyc}_{\pi})
\]
其中 \(\pi\) 是长度为 \(m\) 且不存在位置 \(i\) 使得 \(\pi_i=i\) 的排列。
解
\[\begin{aligned}
\sum\limits_{\pi}F(cyc_\pi)&=\sum\limits_\pi\sum\limits_{i = 0}^{k-1}f_i\times cyc_\pi^i \\
&=\sum\limits_\pi\sum\limits_{i = 0}^{k-1}\sum\limits_{j = 0}^{i-1} f_i{i \brace j}{cyc_\pi \choose j}j! \\
&=\sum\limits_{j = 0}^{k-1}j!\sum\limits_{i = j}^{k-1}f_i {i \brace j}\sum\limits_\pi{cyc_\pi \choose j}
\end{aligned}
\]
我们发现,\(\sum\limits_{i=j}^{k-1}f_i {i \brace j}\) 与 \(\sum\limits_\pi{cyc_\pi \choose j}\) 无关,所以可以将其预处理。
\(j!,f_i,{i \brace j}\) 都是能够优先处理的。现在考虑 \({cyc_\pi \choose j}\) 的处理。
定义函数 \(C_{t,j}\) 为长度为 \(t\) ,环数为 \(j\) 的排列数,\(P_{t,j}=\sum\limits_{{|\pi |}=t}{cyc_\pi \choose j}\) ,通过推导,能够得出:
\[\begin{aligned}
C_{t, j}&=(n-1)(C_{t-1, j}+C_{t-2, j-1}) \\
P_{t, j}&=(n-1)(P_{t-1, j}+P_{t-2, j-1}+P_{t-1, j-1})
\end{aligned}
\]
那么答案即为:
\[\begin{aligned}
\sum\limits_{j = 0}^{k-1}j!\sum\limits_{i = j}^{k-1}f_i {i \brace j}\sum\limits_{k = 1}^nP_{i, j}
\end{aligned}
\]
其中 \(i\) 的复杂度为 \(O(n)\) ,\(j\) 的复杂度为 \(O(k)\),总复杂度为 \(O(nk)\),不会超时。
鸽巢定理
原理:将 \((\sum\limits_{i=1}^{n}p_i)-n+1\) 个东西放入 \(n\) 个盒子中,一定存在一个盒子 \(i\),使得第 \(i\) 个盒子至少装了 \(p_i\) 个物品。
证明(反证法)
\[\forall x\in \mathbb{N^* } \land 1\le x \le n, a_i < p_i \\
\sum a_i <(\sum p_i)-n <(\sum p_i)-n+1
\]
与条件矛盾,故成立。
练习四
有十个数 \(a_1,a_2...a_10\) 满足 \(\forall_{1\le i\le 10}1\le a_i\le 60\),证明能够从 \(a_i\) 中挑出两个交为空的子集,使得它们的和相等。
证明
两个交为空的子集和相等,所以加上交集后和仍不变,总共有 \(2^{10}=1024\),但值域仅为 \([0,600]\),故能够选出。
练习五
证明一张有超过 \(1\) 个点的简单无向图必定有两点度数相等。
证明
考虑分类讨论:
-
有 \(2\) 个度数为 \(0\) 的点,符合条件。
-
有 \(1\) 个度数为 \(0\) 的点,则第 \(n\) 个点需要连 \(n-1\) 条边,故至少有一个点符合。
-
没有度数为 \(0\) 的点,那么边数的范围为 \([1,n-1]\),所以符合。
练习六
证明能从任意 11 个实数中挑选出 4 个数 \(a,b,c,d\) 满足:
\((ac+bd)^2\geq\frac 1 2(a^2+b^2)(c^2+d^2)\)
证明
我们令 \(\overrightarrow x=(a,b),\overrightarrow y=(c,d)\)。原式变为:\(\overrightarrow x \overrightarrow y \ge \frac{\sqrt{2}}{2}\sqrt{|\overrightarrow x||\overrightarrow y|}\)。那么就有:\(\cos<\overrightarrow x,\overrightarrow y>=\frac{\overrightarrow x \overrightarrow y}{\sqrt{|\overrightarrow x||\overrightarrow y|}} \ge \frac{\sqrt{2}}{2}\)
故 \(\overrightarrow x\) 与 \(\overrightarrow y\) 的夹角为 \(45\) 度。然后我们发现,\(11\) 个实数中必定有至少 \(6\) 个正数或负数,故我们只需选择正负性相同的 \(4\) 个数字,这样两条向量一定在同一象限。因为我们有在同一象限的 \(3\) 条向量,每两条之间最大夹角小于 \(45\) 度。故得证。
容斥原理
对于一个集合 \(S\) 的一部分子集构成的簇 \(P\) 有:
\[|\bigcup\limits_{T\in P}T|=\sum\limits_{Q \subseteq P}(-1)^{|Q|-1}|\bigcap\limits_{T
\in Q}T|
\]
基本容斥原理为高中必学内容,这里对此不过多阐述。
二项式反演
结论:
\[\begin{aligned}
F(n)&=\sum\limits_{i = m}^{n}{n \choose i}G(i) \\
G(n)&=\sum\limits_{i = m}^{n}(-1)^{n-i}{n \choose i} F(i) \\
F(n)&=\sum\limits_{i = m}^{n}{i \choose m}G(i) \\
G(n)&=\sum\limits_{i = m}^{n}(-1)^{i-m}{i \choose m} F(i) \\
\end{aligned}
\]
证明
\(F(n)=\sum\limits_{i=m}^n\dbinom ni\sum\limits_{j=m}^i(-1)^{i-j}\dbinom ijF(j)\)
\(=\sum\limits_{j=m}^nF(j)\sum\limits_{i=j}^n\dbinom ni\dbinom ij(-1)^{i-j}\)
\(=\sum\limits_{j=m}^nF(j)\sum\limits_{i=j}^n\dbinom nj\dbinom {n-j}{i-j}(-1)^{i-j}\)
\(=\sum\limits_{j=m}^n\dbinom nj F(j)\sum\limits_{i=j}^n\dbinom {n-j}{i-j}(-1)^{i-j}\)
\(=\sum\limits_{j=m}^n\dbinom nj F(j)\sum\limits_{i=0}^{n-j}\dbinom {n-j}{i}(-1)^{i}\)
\(=\sum\limits_{j=m}^n\dbinom nj F[j](n=j)\)
\(=F(n)\)
第二种形式证明类似。
练习七 BZOJ2839 集合计数(P10596)
有 \(n\) 个元素,问有多少种选择若干个子集的方案,使得选出的子集的交集恰好为 \(k\)。
\(0 < k \le n \le 10^6\)
解
我们先考虑子集的交集大小至少为 \(i\) 的方案,记为 \(F(i)\),那么相当于先挑出 \(i\) 个,再从 \(n-i\) 个中计算出剩余元素的子集的数量即为 \(2^{n-i}\),然后我们需要在这些剩余子集中的挑选子集方案,即为 \(2^{2^{n-i}}\),考虑到当剩余子集为空时,方案就为 \(i\) ,舍去,所以可得 \(F(i)={n \choose i}(2^{2^{n-i}}-1)\)。
然后我们考虑答案函数 \(G(k)\),因为 \(F(i)\) 在求解时会对所有交集大小大于等于 \(i\) 的情况计数,理想情况下应该计数 \(1\) 次,但是经过画图可以发现,当我们处理类似 \(G(i+1)\) 的情况时,其也会对 \(F(i)\) 产生贡献,贡献为 \({i+1 \choose i}\),所以可以得出结论:
\[F(i)=\sum\limits_{j = i}^{n}{j \choose i}G(j)
\]
进行二项式反演可得:
\[\begin{aligned}
G(k)&=\sum\limits_{i = k}^{n}{i \choose k}(-1)^{i-k}F(i)\\
&=\sum\limits_{i = k}^{n}(-1)^{i-k}{i \choose k}{n \choose i}(2^{2^{n-i}}-1)
\end{aligned}
\]
现在就可以解决了。
练习八 BZOJ3622 已经没有什么好害怕的了(P4859)
有两个序列 \(a_i,b_i\) 保证所有元素互不相同。你需要重排 \(b\) 序列,使得恰好有 \(k\) 个 \(i\) 满足 \(a_i>b_i\)。,求方案数。
\(0<k\leq n\leq2000\)。
解
先将 \(a\) 序列排序,使其单调上升。
考虑 \(dp_{i,j}\) 表示考虑前 \(i\) 对数,恰有 \(j\) 对 \(a_i>b_i\) ,这样无法转移。
还是先考虑前 \(i\) 个中至少 \(j\) 对 \(a_i>b_i\),设为 \(dp_{i,j}\),那么就有
\[dp_{i, j}= dp_{i-1, j}+dp_{i-1, j-1}*(cnt(a_i)-j+1)
\]
\(cnt(a_i)\) 表示在当前 \(i\) 位置,有多少个 \(b\) 满足 \(a_i>b\)。
然后设 \(F(i)\) 表示钦定 \(i\) 对符合条件的方案数,\(G(i)\) 表示恰好 \(i\) 对的方案数。在当前位置,由于钦定 \(i\) 对符合,所以剩下的数随便排序,就为 \(A_{n-i}^{n-i}=(n-1)!\),就有:
\[(n-i)! dp_{n, i}= F(i)=\sum\limits_{j = i}^{n}{j \choose i}G(j)
\]
反演可得:
\[\begin{aligned}
G( k)&=\sum\limits_{i = k}^{n}{i \choose k}(-1)^{i-k}F(i) \\
&=\sum\limits_{i = k}^{n}{i \choose k}(-1)^{i-k}(n-i)! dp_{n, i}
\end{aligned}
\]
然后就能够解决啦。
练习九 CF997C Sky Full of Stars
有一个 \(n\times n\) 的矩阵,将其三染色,使得至少有一行或者一列同色,问方案数。
\(n\leq10^6\)
解
我们先钦定有 \(i\) 行 \(j\) 列同色,记为 \(F(i,j)\)
\[F(i, j)=
\begin{cases}
3^{(n-i)n+i}{n \choose i} & j = 0 \\
3^{(n-j)n+j}{n \choose j} & i = 0 \\
3^{(n-i)(n-j)+1}{n \choose i}{n \choose j} & i\ne 0, j\ne 0 \\
\end{cases}
\]
考虑恰好有 \(i\) 行 \(j\) 列同色,记为 \(G(i,j)\)
我们需要求至少一行一列,所以可以用 \(全集-G(0,0)\)。
\[\begin{aligned}
&F(x, y)=\sum\limits_{i = x}^{n}\sum\limits_{j = y}^{n}{i \choose x}{j \choose y}G(i, j) \\
&G(x, y)=\sum\limits_{i = x}^{n}\sum\limits_{j = y}^{n}(-1)^{i+j-x-y}{i \choose x}{j \choose y}F(i, j) \\
&G(0,0)= 3^{n^2}+\sum\limits_{i = 1}^{n}(-1)^{n-i}{n \choose i}(F(0, i)+F(i,0))+\sum\limits_{i = 1}^{n}\sum\limits_{j = 1}^{n}(-1)^{2n-i-j}{n \choose i}{n \choose j}F(i, j) \\
&G(0,0)= 3^{n^2}+\sum\limits_{i = 1}^{n}(-1)^{n-i}{n \choose i}(F(0, i)+F(i,0))+\sum\limits_{i = 1}^{n}\sum\limits_{j = 1}^{n}(-1)^{i+j}{n \choose i}{n \choose j}F(i, j) \\
\end{aligned}
\]
将 \(F(i,j)\) 代入原式子。后面那坨东西即为:
\[\begin{aligned}
&=\sum\limits_{i = 1}^{n}\sum\limits_{j = 1}^{n}(-1)^{i+j}{n \choose i}{n \choose j}3\times 3^{(n-i)(n-j)} \\
&= 3^{n^2+1}\sum\limits_{i = 1}^{n}{n \choose i}(-1)^i3^{-in}\sum\limits_{j = 1}^{n}{n \choose j}(-1)^j3^{-jn}3^{ij} \\
\end{aligned}
\]
现在发现 \(3^{ij}\) 是最不好处理的,因为它使得不能使用二项式定理,先考虑这个的处理方法。
\[\begin{aligned}
&= 3^{n^2+1}\sum\limits_{i = 1}^{n}{n \choose i}(-1)^i3^{-in}\sum\limits_{j = 1}^{n}{n \choose j}(-1)^j3^{j(i-n)} \\
&= 3^{n^2+1}\sum\limits_{i = 1}^{n}{n \choose i}((-1)^i3^{-in}(1-3^{(i-n)})^n-1) \\
G(0,0)&= 3^{n^2}+\sum\limits_{i = 1}^{n}(-1)^{n-i}{n \choose i}(F(0, i)+F(i,0))+(-1)^i3^{-in}\sum\limits_{j = 1}^{n}{n \choose j}(-1)^j3^{-jn}3^{ij}
\end{aligned}
\]
现在就可以处理了。
练习十(第二类斯特林数通项求法)
记 \({n\brace m}\) 表示把 \(n\) 个不同的物品划分为 \(m\) 个集合构成簇的方案数(不允许空集)。
解
我们先设 \(F(n,m)={n \brace m}\),\(G(n,m)\) 表示允许存在空集时的方案数。
易得 \(G(n,m)=\frac{m^n}{m!}\)。
钦定非空集合数,可以有: \(G(n,m)=\sum\limits_{i=1}^{m}{m \choose i}F(n,i)。\)
进行反演可得:\(F(n,m)=\sum\limits_{i=1}^{m}{m \choose i}(-1)^{m-i}G(n,i)。\)
代入可得:\({n\brace m} = f_{n,m}=\sum\limits_{i=1}^m{(-1)^{m-i}\binom mi\frac {i^n}{i!}}=\sum\limits_{i=1}^m{(-1)^{m-i}\frac{i^n}{i!(m-i)!}}\)。
这也是第二类斯特林数的通项公式。
卡特兰数
应用
Catalan 数列 \(H_n\) 是以下问题的方案数:
- 有一个大小为 \(n\times n\) 的方格图,左下角为 \((0, 0)\) 右上角为 \((n, n)\),从左下角开始每次都只能向右或者向上走一单位,不走到对角线 \(y=x\) 上方(但可以触碰)的情况下到达右上角有多少可能的路径?
- 在圆上选择 \(2n\) 个点,将这些点成对连接起来使得所得到的 \(n\) 条线段不相交的方法数?
- 一个栈的进栈序列为 \(1,2,3, \cdots ,n\) 有多少个不同的出栈序列?
- \(n\) 个结点可构造多少个不同的二叉树?
- \(n\) 对括号能组成的括号序列数?
递归/组合公式
\[\begin{aligned}
H_n&=\begin{cases}
\sum_{i = 0}^{n-1}H_iH_{n-i-1}&(n\ge 2)\\
1&(n = 0,1)
\end{cases}\\
&=\binom{2n}{n}-\binom{2n}{n-1}
\end{aligned}
\]
通项公式
\[H_n =\frac{{2n \choose n}}{n+1}
\]
证明
\[H_n =\sum_{i = 0}^{n-1}H_{i}H_{n-i-1} \quad (n\ge 2)
\]
其中 \(H_0=1,H_1=1\)。设它的普通生成函数为 \(H(x)\),利用卷积,得到它的一个方程。
\[\begin{aligned}
H(x)&=\sum_{n\ge 0}H_nx^n\\
&= 1+\sum_{n\ge 1}\sum_{i = 0}^{n-1}H_ix^iH_{n-i-1}x^{n-i-1}x\\
&= 1+x\sum_{i\ge 0}H_{i}x^i\sum_{n\ge 0}H_{n}x^{n}\\
&= 1+xH^2(x)
\end{aligned}
\]
解得
\[H(x)=\frac{1\pm \sqrt{1-4x}}{2x}
\]
那么这就产生了一个问题:我们应该取哪一个根呢?我们将其分子有理化:
\[H(x)=\frac{2}{1\mp \sqrt{1-4x}}
\]
代入 \(x=0\),我们得到的是 \(H(x)\) 的常数项,也就是 \(H_0\)。当
\(H(x)=\dfrac{2}{1+\sqrt{1-4x}}\) 的时候有 \(H(0)=1\),满足要求。而另一个解会出现分母为 \(0\) 的情况(不收敛),舍弃。
因此我们得到了卡特兰数生成函数的封闭形式:
\[H(x)=\frac{1- \sqrt{1-4x}}{2x}
\]
接下来我们要将其展开。使用牛顿二项式定理。
\[\begin{aligned}
(1-4x)^{\frac{1}{2}}
&=\sum_{n\ge 0}\binom{\frac{1}{2}}{n}(-4x)^n\\
&= 1+\sum_{n\ge 1}\frac{\left(\frac{1}{2}\right)^{\underline{n}}}{n!}(-4x)^n
\end{aligned}
\]
其中
\[\begin{aligned}
\left(\frac{1}{2}\right)^{\underline{n}}
&=\frac{1}{2}\frac{-1}{2}\frac{-3}{2}\cdots\frac{-(2n-3)}{2}\\
&=\frac{(-1)^{n-1}(2n-3)!!}{2^n}\\
&=\frac{(-1)^{n-1}(2n-2)!}{2^n(2n-2)!!}\\
&=\frac{(-1)^{n-1}(2n-2)!}{2^{2n-1}(n-1)!}
\end{aligned}
\]
于是
\[\begin{aligned}
(1-4x)^{\frac{1}{2}}
&= 1+\sum_{n\ge 1}\frac{(-1)^{n-1}(2n-2)!}{2^{2n-1}(n-1)! n!}(-4x)^n\\
&= 1-\sum_{n\ge 1}\frac{(2n-2)!}{(n-1)! n!}2x^n
= 1-\sum_{n\ge 1}\binom{2n-1}{n}\frac{1}{(2n-1)}2x^n
\end{aligned}
\]
带回原式得到
\[\begin{aligned}
H(x)&=\frac{1- \sqrt{1-4x}}{2x}=\frac{1}{2x}\sum_{n\ge 1}\binom{2n-1}{n}\frac{1}{(2n-1)}2x^n\\
&=\sum_{n\ge 1}\binom{2n-1}{n}\frac{1}{(2n-1)}x^{n-1}=\sum_{n\ge 0}\binom{2n+1}{n+1}\frac{1}{(2n+1)}x^{n}\\
&=\sum_{n\ge 0}\binom{2n}{n}\frac{1}{n+1}x^{n}\\
\end{aligned}
\]
这样我们就得到了卡特兰数的通项公式。
Min/Max 容斥
定义
公式:
\[\max{S}=\sum\limits_{T\subseteq S}{(-1)^{|T|-1}\min{T}}
\\
\max_{k_{th}}{S}=\sum_{T\subseteq S}{(-1)^{|T|-k}\binom{|T|-1}{k-1}\min{T}}
\]
\(min/max\) 调换也成立
证明 1(其实是我懒得写了摘的)
\(\max\limits_{k_{th}}{S}=\sum\limits_{T\subseteq S}{(-1)^{|T|-k}\dbinom {|T|-1}{k-1}\min T}\)
\(=\sum\limits_{x\in S}x\sum\limits_{x\in T\subseteq S}{(-1)^{|T|-k}\dbinom {|T|-1}{k-1}[\min{T}=x]}\)
令 \(f(x)\) 表示 \(S\) 中大于 \(x\) 的元素构成的集合。
\(=\sum\limits_{x\in S}{x}\sum\limits_{x\in T\subseteq f(x)}{(-1)^{|T|-k}\dbinom{|T|-1}{k-1}}\)
枚举 \(|T|\):
\(=\sum\limits_{x\in S}{x\sum\limits_{l = 1}^{|f(x)|}{(-1)^{l-k}\dbinom{|f(x)|-1}{l-1}\dbinom{l-1}{k-1}}}\)
\(=\sum\limits_{x\in S}{x\sum\limits_{l=1}^{|f(x)|}{(-1)^{l-k}\dbinom {|f(x)|-1}{k-1}\dbinom{|f(x)|-k}{l-k}}}\)
\(=\sum\limits_{x\in S}{x\dbinom {|f(x)|-1}{k-1}\sum\limits_{l=1} ^{|f(x)|}{(-1)^{l-k}\dbinom {|f(x)|-k}{l-k}}}\)
易知 \(|f(x)|< k\) 时无贡献。
\(=\sum\limits_{x\in S}{x\dbinom {|f(x)|-1}{k-1}\sum\limits_{l=0}^{|f(x)|-k}(-1)^l\dbinom{|f(x)|-k}{l}}\)
\(=\sum\limits_{x\in S}{x\dbinom {|f(x)|-1}{k-1}[|f(x)|=k]}\)
\(=\max\limits_{k_{th}}{S}\)
证明 2
设存在一个以集合大小为自变量的函数 \(f\) 满足 \(\max{S}=\sum\limits_{T \subseteq S}f(|T|)\min T\)
记 \(S\) 中元素从大到小排列为 \(x_1,x_2,\cdots,x_m\),则对于 \(x_i\),其在左侧的贡献是 \(i=1\),在右侧的贡献为 \(\sum\limits_{j=0}^{i-1}{i-1 \choose j}f(j+1)\)
若等式成立,必有 \([i=1]=\sum\limits_{j=0}^{i-1}{i-1 \choose j}f(j+1)\)
设 \(F(i)=[i+1=1]\) (即 \([i=1]=F(i-1)\)),\(G(i)=f(i+1)\),则 \(F(i)=\sum\limits_{j=0}^{i}{i \choose j}G(j)\)
反演一下,得
\[G(i)=\sum\limits_{j = 0}^{i}{i \choose j}(-1)^{i-j}F(j)
\]
因为 \(F(i)\) 只在 \(i=0\) 时有值,所以 \(G(i)=(-1)^i\)。
故有 \(f(i)=G(i-1)=(-1)^{i-1}\)。
因而构造成立。
\(kth\min-\max\) 证明同理
应用
Min-Max 容斥及推广常用于解决 元素都出现的期望时间 的问题,处理方法:
记 \(t_i\) 表示第 \(i\) 个元素出现的时间,则:
- \(\max(S)\) 表示 \(S\) 中 \(t\) 的最大值,即所有元素出现的时间。
- \(\min(S)\) 表示 \(S\) 中 \(t\) 的最小值,即至少一个元素出现的时间。
根据 Min-Max 容斥可以用 \(\min(S)\) 求 \(\max(S)\)
等式两边同时取期望,由于期望的线性运算,可以直接放到 \(\sum\) 中,即
\[E(\max(S))=\sum\limits_{T \subseteq S}(-1)^{|T|-1}E(\min(T))
\]
然后发现 \(E(\min T)\) 很好求,就是一个元素出现的期望时间。
即可求解。
练习十一
给定三个序列 \(a_i,b_i,c_i\),求
\[\sum\limits_{1\leq i < j\leq n}{\max{a_i+a_j, b_i+b_j, c_i+c_j}-\min{a_i+a_j, b_i+b_j, c_i+c_j}}
\]
\(n\leq2\times10^5\)
解
先用容斥拆开 \(max\):
\[\begin{aligned}
&\ \ \ \ \max a_i+a_j, b_i+b_j, c_i+c_j \\
&= a_i+a_j+b_i+b_j+c_i+c_j \\
&\ \ \ \ -\min{a_i+a_j, b_i+b_j}-\min{a_i+a_j, c_i+c_j}-\min{b_i+b_j, c_i+c_j} \\
&\ \ \ \ +\min{a_i+a_j, b_i+b_j, c_i+c_j}
\end{aligned}
\]
最后一项与原式抵消掉,剩下的两种 \(min\) 中,第一种可以直接求出,第二种可以化成以下形式:
\[\min(a, b)= a [a < b]
\]
所以可以变成:
\[\begin{aligned}
-a_i-a_j [a_i+a_j < b_i+b_j]-a_i-a_j [a_i+a_j < c_i+c_j]-b_i-b_j [b_i+b_j < c_i+c_j] \\
-a_i-a_j [a_i-b_i < b_j-a_j]-a_i-a_j [a_i-c_i < c_j-a_j]-b_i-b_j [b_i-c_i < c_j-b_j]
\end{aligned}
\]
这个实质就是求顺序对(二维偏序),总复杂度 \(O(n \log n)\)。
练习十二
给 \(n\) 个元素,每次会随机选择一个,有 \(p_i\) 的概率选择第 \(i\) 个,问第一次所有元素都被选择过的期望时间。
\(1\leq n\leq20\)
解
设每个元素被选择时的时间为 \(t_i\),那么所有元素被选就是 \(t_{maxS}\),套上公式:
\[E(\max{S})=\sum\limits_{T\subseteq S}{(-1) ^{|T|-1}E(\min{T})} \\
\]
\(E(\min T)\) 的含义实际上就是第一次选到 \(T\) 中元素的期望时间,一次选中的概率是 \(\frac{1}{\sum\limits_{x\in T}p_x}\) ,期望时间就是其倒数 \(\sum\limits_{x\in T}p_x\)
然后套入式子计算即可,\(O(n2^n)\)。
练习十三 P4707 重返降世
给 \(n\) 个元素,每次会随机选择一个,有 \(\frac {p_i} M\) 的概率选择第 \(i\) 个,问第一次有 \(k\) 元素被选择过的期望时间。
\(1\leq l\leq n\leq 10^3,n-10\leq k\leq n,\sum\limits_{i=1}^n{p_i}=M\leq10^4\)。
解
相当于就是求 \(t_i\) 第 \(k\) 小,思路大体上与上一题差不多,我们不妨改成求 \(n-k\) 大,让 \(k=n-k\),就能得出式子:
\[\begin{aligned}
E(\max\limits_{k_{th}}S)&=\sum\limits_{T\subseteq S}(-1)^{|T|-k}E(\min T) \\
&=\sum\limits_{T\subseteq S}(-1)^{|T|-k}{|T|-1 \choose k-1}\frac{M}{\sum\limits_{x\in T}p_x}
\end{aligned}
\]
现在麻烦的是 \(\frac{M}{\sum\limits_{x\in T}p_x}\),我们发现所有 \(p_i\) 之和不会超过 \(M\),所以可以考虑计算每一种 \(\sum\limits_{x\in T}p_x\) 作为分母的项的系数之和。考虑设 \(dp_{i,j}\) 表示前 \(i\) 个,分母和为 \(j\) 的项的系数和。
在转的时候会发现转不了,所以再设一个参数 \(l=|T|\)。
那么就有 \({|T|-1 \choose k-1}=\frac{|T|-1}{|T|-k}{|T|-2 \choose k-1}\) 。
\[dp_{i, j, l}= dp_{i-1, j}-\frac{l-1}{l-k}dp_{i-1, j-p_i, l-1}
\]
这个复杂度过不了,所以换方法,因为 \({|T|-1 \choose k-1}={|T|-2 \choose k-1}+{|T|-2 \choose k-2}\),所以:
\[dp_{i, j, l}= dp_{i-1, j, l}+dp_{i-1, j-p_i, l-1}-dp_{i-1, j-p_i, l} \\
\]
这样就是 \(O(nmk)\) 的了。
第二类斯特林数
含义
\({n \brace k}\) 表示将 \(n\) 个元素划分成 \(k\) 个 \(\textbf{非空子集}\) 的方案数。
特殊值
\[\begin{aligned}
{n \brace 0}= [n = 0],{n \brace 1}={n \brace n}= 1(n > 0) \\
{n \brace 2}= 2^{n-1}-1(n > 0),{n \brace n-1}={n \choose 2}
\end{aligned}
\]
递推式
\[{n \brace k}={n-1 \brace k-1}+k{n-1 \brace k}
\]
即考虑第 \(n\) 个元素放在哪个集合。要么在已经有的 \(k\) 个非空集合里选一个放进去,要么自己单开一个新的集合。
边界是 \({n \brace 0}=[n=0]\)。
第二类斯特林数生成函数
一个盒子装 \(n\) 个物品且盒子非空的方案数是 \([n>0]\)。我们可以写出它的 EGF 为
\[F(x)= \sum_{n = 1}^{\infty}\frac{x^n}{n!}= e^x-1
\]
由 EGF 卷积的组合意义,\(F^k(x)\) 就是 \(n\) 个有标号物品放到 \(k\) 个 \(\textbf{有}\) 标号盒子里的 EGF。而第二类斯特林数是 \(n\) 个有标号物品放到 \(k\) 个 \(\textbf{无}\) 标号盒子里的方案数,所以要再除以一个 \(k!\)
\[\frac{1}{n!}{n \brace k} = [x^n]\frac{(e^x-1)^k}{k!}
\]
通项公式
\[{n \brace k}={1 \over k!}\sum\limits_{i = 0}^{k}(-1)^i{k \brace i}(k-i)^n =\sum\limits_{i = 0}^{k}{{(-1)^{k-i}i^n} \over {i!(k-i)!}}
\]
证明
设将 \(n\) 个有标号物品放到 \(k\) 个有标号盒子(允许空盒子)的方案数为 \(G_i\);将 \(n\) 个有标号物品放到 \(k\) 个有标号盒子(不允许空盒子)的方案数为 \(F_i\)
\[G_i = k^n,\ G_i = \sum_{j = 0}^i \binom{i}{j}F_j
\]
由二项式反演
\[F_k =\sum_{i = 0}^k(-1)^{k-i}\binom{k}{i}G_i =\sum_{i = 0}^k(-1)^{k-i}\binom{k}{i}i^n =\sum_{i = 0}^k\frac{k!(-1)^{k-i}i^n}{i!(k-i)!}
\]
\(F_k\) 是有标号的盒子,第二类斯特林数是无标号盒子再除以一个 \(k!\)
\[\begin{Bmatrix}n\\k\end{Bmatrix} = \sum_{i = 0}^k\frac{(-1)^{k-i}i^n}{i!(k-i)!}
\]
第一类斯特林数
含义
\(\Large{n \brack k}\) 表示将 \(n\) 个元素排成 \(k\) 个 \(\textbf{轮换}\) 的方案数。也即所有 \(n!\) 个排列中,构成的置换有 \(k\) 个环的排列数。
特殊值
\[{n \brack 0} = [n = 0],\quad {n \brack n} = 1(n > 0)\\
{n \brack 1} = (n-1)!(n > 0),\quad {n \brack n-1} = \binom{n}{2}
\]
递推式
\[{n \brack k}=(n-1){n-1 \brack k}+{n-1 \brack k-1}
\]
即考虑第 \(n\) 个元素放在哪个轮换里。要么在已经有的 \(k\) 个轮换里选一个位置插进去,方案数是 \(n-1\);要么自己单开一个新的轮换。
生成函数
类似第二类斯特林数地,我们先考虑 \(1\) 个盒子,即 \(k=1\) 时 \(\begin{bmatrix}n\\1\end{bmatrix}=(n-1)!\) 的 EGF:
\[F(x)=\sum_{n = 1}^\infty(n-1)!\dfrac{x^n}{n!}=\sum\limits_{n = 1}^\infty \dfrac{x^n}{n} = -\ln(1-x)
\]
那么 \(n\) 个元素组成 \(k\) 个 \(\textbf{无}\) 标号轮换的 EGF 为
\[\frac{F^k(x)}{k!}=\frac{(-1)^k\ln^k(1-x)}{k!}
\]
即
\[\frac{1}{n!}{n \brack k}= [x^n]\frac{(-1)^k\ln^k(1-x)}{k!}
\]
\(Ex\):第一类斯特林数没有实用的通项公式。
特殊等式行之和
我们知道一个有 \(n\) 个元素的排列和一个 \(n\) 个元素的置换一一对应,于是对所有置换中的轮换个数求和,我们有
\[\sum_{k = 0}^n{n \brack k}= n!
\]
通常幂、下降幂、上升幂转换
互相转换公式
\[\begin{aligned}
x^{\overline{n}}&=\sum\limits_{i = 0}^{n}{n \brack k}x^k \\
x^{\underline{n}}&=\sum\limits_{k = 0}^{n}(-1)^{n-k}{n \brack k}x^k \\
x^n&=\sum\limits_{k = 0}^{n}{n \brace k}x^{\underline{k}}=\sum\limits_{k = 0}^{n}{n \brace k}{x \choose k}k! \\
x^n&=\sum\limits_{k = 0}^{n}{n \brace k}(-1)^{n-k}x^{\overline{k}}
\end{aligned}
\]
证明都可以使用数学归纳法
反转公式
把上面的式子结合起来即可。
\[\begin{aligned}
\sum\limits_{k}{n \brace k}{k \brack m}(-1)^{n-k}&= [m-n] \\
\sum\limits_{k}{n \brack k}{k \brace m}(-1)^{n-k}&= [m = n] \\
\end{aligned}
\]
拓展公式
-
\[{n+1 \brace m+1} = \sum_k \binom{n}k{k \brace m}
\]
组合意义:枚举 \(k\) 表示 \(n+1\) 号节点所在的集合之外剩下了 \(k\) 个节点,这 \(k\) 个节点要构成 \(m\) 个集合。
-
\[{n+1 \brack m+1} = \sum_k{n \brack k} \binom km
\]
组合意义:还是枚举 \(n+1\) 号点所在环的大小,设为 \(t+1\),那么方案数应该是 \(t! {n-t \brack m}\),这 \(t!{n-t \brack m}\) 个方案对应 \({n \brack 0},{n \brack 1},\cdots, {n \brack n}\) 的所有置换中不连接这 \(t\) 个和剩下 \(n-t\) 个点的所有置换,所以有上式。
-
\[{n \brace m} = \sum_{k}\binom{n}{k}{k+1 \brace m+1}(-1)^{n-k}
\]
-
\[{n \brack m} = \sum_k {n+1\brack k+1}\binom km (-1)^{m-k}
\]
这是前两个式子的二项式反演
-
\[{m+n+1 \brace m}=\sum_{k=0}^m k{n+k \brace k}
\]
\(
\text{原式} = \sum_{k = 0}^m{n+k+1 \brace k}-{n+k \brace k-1}={m+n+1 \brace m}
\)
-
\[{m+n+1 \brack m}=\sum_{k=0}^m (n+k){n+k \brack k}
\]
同 5 理
斯特林反演
形式
\[f(n)=\sum_{k = 0}^n {n \brace k} g(k)\iff g(n) = \sum_{k = 0}^n(-1)^{n-k}{n \brack k} f(k)
\]
证明
我们有反转公式
\[\sum_{k} {n \brace k}{k \brack m} (-1)^{n-k}= [m = n]\\
\sum_{k} {n \brack k}{k \brace m} km (-1)^{n-k}= [m = n]
\]
直接带入易证
也有以下形式,与二项式反演类似:
\[f(m)=\sum_{k = m}^n {k \brace m} g(k)\iff g(m) = \sum_{k = m}^n (-1)^{k-m}{k \brack m} f(k)
\]