组合数学

数学

组合数学的常见式子

定义式

\[C_{n}^{m}=\binom{n}{m}=\frac{n!}{m!(n-m)!}=\frac{n^\underline{m}}{m!} \]

表示从 \(n\) 个不同元素中选出 \(m\) 个(不计顺序)的方案数。

一些应用

插板法:

1.有 \(n\) 个完全相同的元素,将其分为 \(k\) 组,每组至少有一个元素,一共有多少种分法?(sol:在 \(n-1\) 个空格中放 \(k-1\) 块板)

\[\binom{n-1}{k-1} \]

2.有 \(n\) 个完全相同的元素,将其分为 \(k\) 组,每组可以为空,一共有多少种分法?(sol:每一组加一个数,共 \(n+k\) 个数,然后用上一题解决)

\[\binom{n+k-1}{k-1}=\binom{n+k-1}{n} \]

3.从\(1, 2, · · · , n\) 中选出 \(k\) 个数,要求任何两个数都不相邻,一共有多少种选法?

sol: 选择 \(k\) 个数会分成 \(K+1\) 段,设每段包含的数的个数为 \(a_0,a_1,a_2,...\) 则满足

\[a_0+a_1+...+a_k+1=n-k(a_0,a_{k+1}>0,a_1...>1) \]

所以给 \(a_0,a_{k+1}\) 加两个数,则变成问题1,从 \(n-k+2\) 个数中每组至少有一个元素分为 \(k+1\) 组的分法。

\[\binom{n-k+1}{k} \]

递推式

\[\binom{n}{m}=\binom{n-1}{m-1}+\binom{n-1}{m} \]

证明(组合意义):

同学和老师出去春游共有 \(n\) 个人,一项活动只能去 \(m\) 个人,考虑老师去或不去,老师去在 \(n-1\) 个同学中选 \(m-1\) 个,否则在 \(n-1\) 个同学中选 \(m\) 个。

特征:

加号连接,两个组合数的 \(n\) 相同, \(m\) 相差1。


对称性

\[\binom{n}{m}=\binom{n}{n-m} \]

对于\(n,m\in Z\)

证明(组合意义):

\(n\) 个数中选 \(m\) 个数,等同于从 \(n\) 个数中选 \(n-m\) 个数不选。


吸收/相伴等式

\[\frac{\binom{n}{m} }{\binom{n-1}{m-1}}=\frac{n}{m} \Rightarrow k\binom{n}{k}=n\binom{n-1}{k-1} \]

\[\frac{\binom{n}{m} }{\binom{n-1}{m}}=\frac{n}{n-m} \Rightarrow (n-k)\binom{n}{k}=n\binom{n-1}{k} \]

\[\frac{\binom{n}{m} }{\binom{n}{m-1}}=\frac{n-m+1}{m} \]

最终形式:

\[\binom{r}{k}=\frac{r}{k}\binom{r-1}{k-1} \]

证明:

将式子转为阶乘的形式,即可证明等式两边相等。

特征:

除号连接,分号上为 \(\binom{n}{m}\) ,分号下的 \(n\) 或者 \(m\) 减一。


上指标反转

\[\binom{n}{m}=\left ( -1 \right ) ^{m} \binom{m-n-1}{m} \]

证明:

\[\binom{n}{m}=\frac{n!}{m!(n-m)!}=\frac{n(n-1)(n-2)...(n-m+1)}{m!} \]

\[=\left(-1\right)^{m}\frac {-n\left(-n+1\right)\left(-n+2\right)...\left(-n+m-1\right)}{m!} \]

\[=\left(-1\right)^{m}\binom{m-n-1}{m} \]

特征:

有一个(-1)^m。


三项式系数恒等式

\[\binom{n}{m}\binom{m}{k}=\binom{n}{k}\binom{n-k}{m-k} \]

证明(组合意义):

\(n\) 个数选出 \(m\) 个再在 \(m\) 个中选 \(k\) ,等同与从 \(n\) 个数中选 \(k\) ,在从 \(n-k\) 中找 \(m-k\) 。(因为等式右边先选出 \(k\) 在找 \(m-k\)\(k\) 一起等同于一开始选 \(m\)

特征:

第一个组合数的 \(m\) 等于第二个的 \(n\)


平行求和

\[\binom{n}{0}+\binom{n+1}{1}+\binom{n+2}{2}+....=\sum_{k=0}^{m}\binom{n+k}{k}=\binom{n+m+1}{m} \]

证明:

\[\binom{n+m+1}{m} \\ = \binom{n+m}{m}+\binom{n+m}{m-1}\\ = \binom{n+m}{m}+\binom{n+m-1}{m-1}+\binom{n+m-1}{m-2} \]

不断展开即可。

特征:

上下指标同时加减。

上指标求和

\[\sum_{i=0}^{n} \binom{i}{m}=\binom{n+1}{m+1} \]

证明(组合意义):

\(n+1\) 个数选出 \(m+1\) 个,考虑最后一个数是第 \(i+1\) 个数,则需要从前 \(i\) 个数中选 \(m\) 个数。

特征:

\(\sum\) 以及上指标变化,下指标不变


下指标求和(整行)

\[\sum_{i=0}^{n} \binom{n}{i}=2^n \]

证明(组合意义):

\(n\) 个数中任选出 \(0\)\(n\) 个数等于 \(n\) 个数的所以子集,每个数可选可不选,所以共2^n种可能。

特征:

\(\sum\) 以及下指标变化,上指标不变

交错和

\[\sum_{k=0}^{m}(-1)^k\binom{n}{k}=(-1)^m\binom{n-1}{m} \]

证明:

\[\begin{eqnarray} \sum_{k=0}^{m}(-1)^k\binom{n}{k}&=&\sum_{k=0}^{m}\binom{k-n-1}{k} 上指标反转\\ &=&\binom{m-n}{m}平行求和\\ &=&(-1)^m\binom{n-1}{m}上指标反转 \end{eqnarray} \]


下指标卷积

\[\sum_{i=0}^{k} \binom{n}{i}\binom{m}{k-i}=\binom{n+m}{k} \]

证明(组合意义):

\(n\) 个数中选出 \(i\) 个数 从 \(m\) 个数中选 \(k-i\) 个数,等于在 \(n+m\) 个数中选 \(k\)

特征:

\(\sum\) 以及下指标的和不变,上指标不变


上指标卷积

\[\sum_{i=0}^{n} \binom{i}{a}\binom{n-i}{b}=\binom{n+1}{a+b+1} \]

证明(组合意义):

\(n\) 个数分成左右两边,左边 \(a\) 中选出 \(i\) 个数 , 右边从 \(b\) 个数中选 \(n-i\) 个数,等于给原数加一个分隔符,从 \(n+1\) 个数中选 \(a+b+1\)

特征:

\(\sum\) 以及下指标的和不变,上指标不变


范德蒙德卷积

\[\sum_{i=0}^{n} \binom{r}{k}\binom{s}{n-k}=\binom{r+s}{n} \]

证明(组合意义):

\(n\) 个数分成左右两边,左边 \(r\) 个数 中选出 \(k\) 个数 , 右边 \(s\) 个数中选 \(n-k\) 个。


练习题

1.

\[\sum_{i=0}^{m}\binom{n+i}{i} \]

\[\sum_{i=0}^{m}\binom{n+i}{i}=\sum_{i=0}^{m}\binom{n+i}{n}对称性 \]

\[=\binom{n+m+1}{n+1}上指标求和 \]

\[\begin{eqnarray} \sum_{k}\binom{n}{k}^2&=&\sum_{k}\binom{n}{k}\binom{n}{n-k} 对称\\ &=&\binom{2n}{n}范德蒙德卷积\\ \end{eqnarray} \]

\[\begin{eqnarray} \sum_{k}k\binom{n}{k}^2&=&\sum_{k}n\binom{n}{k}\binom{n-1}{k-1} 吸收\\ &=&\sum_{k}n\binom{n}{n-k}\binom{n-1}{k-1}对称\\ &=& n\binom{2n-1}{n-1} \end{eqnarray} \]

\[\begin{eqnarray} \sum_{k}^{m}\frac{\binom{m}{k}}{\binom{n}{k}}&=&\sum_{k}^m\frac{\binom{n-k}{m-k}}{\binom{n}{m}} 三项式系数恒等式\\ &=&\frac{1}{\binom{n}{m}}\sum_{k}^m\binom{n-k}{m-k}\\ &=& \frac{\binom{n+1}{m}}{\binom{n}{m}}平行求和\\ &=& \frac{n+1}{n-m+1}\\ \end{eqnarray} \]

\[\begin{eqnarray} \sum_{k=m}^{n}(-1)^k\binom{n}{k}\binom{k}{m}&=&\sum_{k=m}^n(-1)^k\binom{n-m}{k-m}\binom{n}{m} 三项式系数恒等式\\ &=&(-1)^n\binom{n}{m}\sum_{k=m}^n\binom{m-k-1}{n-k}上指标反转\\ &=&(-1)^n\binom{n}{m}\sum_{k=0}^{n-m}\binom{m-n+k-1}{k}换元\\ &=&(-1)^n\binom{n}{m}\binom{0}{n-m}\\ &=&(-1)^n[n==m] \end{eqnarray} \]

2.

\(q\) 组询问,每次给出 \(n\) , \(m\) ,求 \(\sum_{i=0}^{m}\binom{n}{i}\)
q, n, m ≤ 105,对 1e9 + 7 取模。
1.当已知 \(\sum_{i=0}^{m}\binom{n}{i}\)\(\sum_{i=0}^{m}\binom{n+1}{i}\)时,因为

\[\sum_{i=0}^{m}\binom{n+1}{i}=\sum_{i=0}{m}(\binom{n}{i}+\binom{n}{i-1})=2\sum_{i=0}{m}\binom{n}{i}-\binom{n}{m} \]

以下面的表格为例,第3行等于第2行加第1行.(第一行和第二行的和均为\(\sum_{i=0}^{m}\binom{n}{i}\),第三行的和为\(\sum_{i=0}^{m}\binom{n+1}{i}+\binom{n}{m}\)

\(\binom{n}{0}\) \(\binom{n}{1}\) \(\binom{n}{2}\) \(\binom{n}{3}\)
\(\binom{n}{0}\) \(\binom{n}{1}\) \(\binom{n}{2}\) \(\binom{n}{3}\)
\(\binom{n+1}{0}\) \(\binom{n+1}{1}\) \(\binom{n+1}{2}\) \(\binom{n+1}{3}\) \(\binom{n}{3}\)

2.当已知 \(\sum_{i=0}^{m}\binom{n}{i}\)\(\sum_{i=0}^{m+1}\binom{n}{i}\)

\[\sum_{i=0}^{m+1}\binom{n}{i}=\sum_{i=0}{m}\binom{n}{i}+\binom{n}{m+1} \]

所以每一步都可以 \(o(1)\) 转移,莫队离线处理。

3.下指标点积

\[\sum_{i=0}{m}\binom{n}{i}\binom{m}{i}=\sum_{i=0}{m}\binom{n}{i}\binom{m}{m-i} \]

上指标为常数,下指标和为常数(下指标卷积)

\[=m\binom{n+m}{m} \]

4.

\[\sum_{i=m}^{n}(-1)^i\binom{n}{i}\binom{i}{m} \]

\[\sum_{i=m}^{n}(-1)^i\binom{n}{i}\binom{i}{m}=\sum_{i=m}^{n}(-1)^i\binom{n}{m}\binom{n-m}{i-m} \]

三项式系数恒等式

\[=\binom{n}{m}\sum_{i=m}^{n}(-1)^i\binom{n-m}{i-m} \]

\[=\binom{n}{m}\sum_{j=0}^{n-m}(-1)^j+m\binom{n-m}{i-m} \]

\[=(-1)^m\binom{n}{m}\sum_{j=0}^{n-m}(-1)^j\binom{n-m}{i-m} \]

\[=(-1)^m\binom{n}{m}(-1+1)^(n-m) \]

二项式定理
当且仅当, \(n==m\) 时有值,因为 \(n==m\)\(\binom{n}{m}==1\),所以

\[=(-1)^m \left [ n=m \right ] \]

5.有标号连通图计数

\(f_i\) 为大小为 \(i\) 个点的有标号连通图的数量,\(g_i\) 为有 \(i\) 个点的有标号图的数量。
因为任意两个点有一条边,可选可不选,所以

\[g_i=2^\binom{n}{2} \]

对于一个点在一个大小为 \(i\) 的联通块里,联通块的元素有 \(\binom{n-1}{i-1}\) 种可能,就有个数乘 \(f_i\) 种不同的连通图,剩下的点随便连,则可用 \(f_i\) 表示 \(g_i\) .

\[g_i=\sum_{i=1}^{n}\binom{n-1}{i-1}f_ig_{n-i} \]

\[f_i=g_i-\sum_{i=1}^{n-1}\binom{n-1}{i-1}f_ig_{n-i} \]

6.幼儿园篮球题

给定 \(L\) , \(T\) 次询问,每次给 \(n,m,k\) ,求 \(\sum_{i=0}^{k}\binom{m}{i}\binom{n-m}{k-i}i^L\)
补充:

\[x^{n}=\sum_{i=0}^{n}\Large\{_i^n\}x^{\underline{i}} \]

Lucas定理

\[\binom{n}{m}\equiv\binom{\left \lfloor n/p \right \rfloor }{\left \lfloor m/p \right \rfloor }\binom{n%p}{m%p}\pmod{p} \]

证明:

二项式定理\((a+b)^{2}=\sum_{i=0}^{n}\binom{n}{i}a^{n}b^{n-i}\)
因为对于任何 \(i\) 在模意义下, 只有 \(i=0\) 或者 \(p\)\(\binom{p}{i}\) 有值为1.
所以 \(\left(a+b\right)^p\equiv a^p+b^p\)
考虑 \(\binom{n}{m}\) 是要求 \(\left(1+x\right)^n\)\(x^m\) 的系数。

\[\left(1+x\right)^n=\left(1+x\right)^{p\left \lfloor n/p \right \rfloor }\left(1+x\right)^{n\bmod p} \]

又因为

\[\left(1+x\right)^{p\left \lfloor n/p \right \rfloor }=\left(1+x^{p}\right)^{\left \lfloor n/p \right \rfloor } \]

所以 \(\left(1+x\right)^{p\left \lfloor n/p \right \rfloor }\) 只有 \(x^{kp}\) 的系数 \(\left(1+x\right)^{n\bmod p}\) 只有 \(x^{0}\)\(x^{p-1}\) 的系数,两个式子相乘得到的 \(x^{m}\) 的系数只有一种可能,那就是第一个式子的 \(x^{p\left \lfloor n/p \right \rfloor }\) 的系数与第二个式子的 \(x^{n\bmod p}\) 的系数。所以原命题得证.

应用

\(n\),\(m\)极大时的组合数,一般数据要求 \(p\) 小于 1e5.

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+10; 
int t,n,m,p;
ll a[N];
ll ksm(ll x,ll y)
{
	x%=p;
	ll ans=1;
	while(y)
	{
		if(y&1)ans=ans*x%p;
		x=x*x%p;
		y>>=1;
	}
	return ans;
}
ll C(int n,int m)
{
	if(m>n)return 0; //防止n-m越界
	return a[n]*ksm(a[m],p-2)%p*ksm(a[n-m],p-2)%p;
}
ll lucas(int n,int m)
{
	if(m==0)return 1;//边界,m==0时lucas(n/p,m/p)和C(n%p,m%p)都是1。
	return (lucas(n/p,m/p)*C(n%p,m%p)+p)%p;
}
int main()
{
	scanf("%d",&t);
	a[0]=1;
	while(t--)
	{
		scanf("%d%d%d",&n,&m,&p);
		for(int i=1;i<=p;i++)a[i]=a[i-1]*i%p;
		printf("%lld\n",(lucas(n+m,n)+p)%p);
	}
	return 0;
} 

代码注意事项:
1.要开longlong
2.要判越界。

斯特林数

定义

\({n\brace k}\) 表示将 \(n\) 个元素划分为 \(k\) 个非空子集的方案数(第二类)

\({n\brack k}\) 表示将 \(n\) 个元素排成 \(k\) 个轮换*的方案数(第一类)

*轮换:环形排列(首尾相接)

\(a\)对应\(b\) ,\(b\)对应\(c\) ,\(c\)对应\(d\) ,\(d\)对应\(a\) 就是一个轮换 \([a,b,c,d]\)

有定义可知

\[[a,b,c,d]=[b,c,d,a]=[c,d,a,b]=[d,a,b,c]\ne [a,c,b,d] \]

同时我们发现一个 \(n\) 轮换对应 \(n!\) 个的 \(n\) 排列中的 \(n\) 个 ,所以有

\[{n\brack1}=(n-1)! \]

我们知道一个有 n 个元素的排列和一个 n 个元素的置换一一对应,于是对所有置换 中的轮换个数求和,有】

\[\sum_{k=0}^n{n\brack k}=n! \]

与幂之间的关系

\[\begin{aligned} & x^n=\sum_{k=0}^n{n\brace k}x^{\underline k}=\sum_{k=0}^n{n\brace k}\binom{x}{k}k!(普通转下降幂)\\ & x^{\overline n}=\sum_{k=0}^n{n\brack k}x^k(上升幂转普通)\\ & x^{\underline n}=\sum_{k=0}^n(-1)^{n-k}{n\brack k}x^k(下降转普通幂,交错可证)\\ & x^n=\sum_{k=0}^n{n\brace k} (-1)^{n-k}x^{\overline k}(普通转上升)\\ & x^{\underline n}=(-1)^n(-x)^{\overline n}(上下互转) \end{aligned} \]

反转公式(没懂)

反演半家桶

二项式反演

\[g_n=\sum_{i=0}^n\binom{n}{i}f_i\Leftrightarrow f_n=\sum_{i=0}^n\binom{n}{i}(-1)^{n-i}g_i\\ g_m=\sum_{i=m}^n\binom{i}{m}f_i\Leftrightarrow f_m=\sum_{i=0}^n\binom{i}{m}(-1)^{i-m}g_i\\(为矩阵的转置) \]

斯特林反演

卡特兰数

表达式

\[H_n=\begin{cases} \sum_{i=0}^{n-1}H_iH_{n-i-1}(n>=2)\\ 1 (n=0,1) \end{cases}\\ H_n=\binom{2n}{n}-\binom{2n}{n-1} \]

对应问题:

  1. 有一个大小为 \(n × n\) 的方格图,左下角为 \((0, 0)\) 右上角为 \((n, n)\),从左下角开始 每次都只能向右或者向上走一单位,不走到对角线 y = x 上方(但可以触碰) 的情况下到达右上角有多少可能的路径?

  2. 在圆上选择 \(2n\) 个点,将这些点成对连接起来使得所得到的 \(n\) 条线段不相交的 方法数?

  3. 一个栈的进栈序列为 1, 2, 3, · · · , n 有多少个不同的出栈序列?

  4. \(n\) 个结点可构造多少个不同的二叉树?

  5. \(n\) 对括号能组成的括号序列数?

  6. ……

通项公式

\[H_n={\binom{2n}{n}\over n+1} \]

递推式

\[H_n={H_{n-1}(4n-2)\over n+1} \]

容斥

普通

Min-Max 容斥

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

可以套期望。

通常与FWT/FMT 结合

子集和

点击查看代码
for(int i=0;i<n;i++)//枚举位
	 	for(int j=0;j<(1<<n);j++)//枚举集合
		 	if(j&(1<<i)) f[j]+=f[j^(1<<i)];//这一位为1

ff

posted @ 2024-07-05 11:11  storms11  阅读(64)  评论(2编辑  收藏  举报