排列组合总结

排列组合

基本计数原理

只作简单的介绍,不作严谨的定义的解释。

加法原理

在很多地方解释为“分类”

把一个集合划分成若干个子集,那么大集合的对应对象数目可以用每一个部分的对象数目之和来表示。

整体等于部分之和。

如果划分出来的部分可以相交,那么还需要使用容斥原理来计算集合的对应数目。

乘法原理

在很多地方解释为“分步”

\(S\) 是对象的有序对 \((a,b)\) 的集合,第一个对象来自于大小为 \(p\) 的集合,并且对于这样的每一个选择,第二个对象有 \(q\) 种选择,那么 \(S\) 的大小为 \(|S|=p\times q\)

对于乘法原理,第二个对象的选择情况可以随着第一个数的变化而动态改变,但是第二个对象的选择数量不变才能使用乘法原理。

通俗的解释是:对于乘法原理,如果一个任务的选择依赖于之前的任务选择,那么就不能使用乘法原理。

减法原理

可以称之为“正难则反”

对于一个集合,我们可以不直接求这个集合的大小,而是可以通过泛集 \(U​\) 减掉不属于这个集合的部分,这样也可以得到原集合。

除法原理

通常可以用于“消序”或称“去重”

对于一个集合,将其划分为若干个数量相同的部分,那么每一个部分的数量就是总集合大小除以部分的个数。

排列&组合

排列

对于有序的选择或者放置,我们称为排列

集合的排列

集合 \(S\)\(r\) 排列:\(n\) 个元素构成的集合 \(S\) 中选择 \(r\) 个元素的有序放置。

\(n\) 元素集合 \(S\)\(r\) 排列数量记作: \(\large P^{m}_{n}\) 或者 \(\large P(n,m)\) 或者 \(\large A^{m}_{n}\)

  • 对于 \(r>n\)\(P(n,r)=0\)
  • 对于任意正整数 \(n\)\(P(n,1)=n\)
  • \(n\) 元素集合 \(S\)\(r\) 排列数量记作 \(S\) 的排列或者 \(S\)全排列
定理1(排列数的计算)

\(\large \forall \ \ n,r\in Z^{+}\)\(\large \ s.t.\ r\le n\) ,有:

\(\large P(n,r)=n\times (n-1)\times ...\times (n-r+1)=\frac{n!}{(n-r)!}\)

  • 证明:构造 \(r\) 排列的时候,第一项有 \(n\) 种选择,第二项有 \(n-1\) 种选择 \(...\)
  • 于是我们使用乘法原理即可。
  • 特别的,定义 \(\large P(n,0)=1,P(n,n)=n!\)

插空法(隔板法)

如果要求某些元素两两不相邻,则可以先排列其余元素,然后将剩下的元素选择其余元素两侧的空位插入,一个元素插入一个空位即可。

例如,我们要求26个小写字母的排列,但是要求 \(a,e,i,o,u\) 必须任意两个不连续的方案数。

可以使用插空法,先排列21个辅音字母,然后将元音字母插入到22个空位当中,根据乘法原理方案数就是\(P(21,21)\times P(22,5)\)

捆绑法

如果要求某些元素必须相邻,则可以将这些元素捆绑之后,整体替换为一个新的元素,然后将新元素与其余元素进项排列,最后使用乘法原理计算新元素内部的排列方式即可。

例子:求这样的七位数,满足各位互不相同并且5和8不能连续出现的个数。

法一:分类讨论划分集合,然后各自统计之后使用加法原理求和。

法二:使用减法原理,用总的数减掉58连续的数,这部分直接使用捆绑法即可。

圆排列

线性排列的概念

我们之前讨论的都是把所有元素排成一条线,因此可以称之为线性排列。

圆排列的概念

如果我们将所有元素有序地排列为一个圆,那么通过旋转重合的排列应该被视为同一种排列,因此排列的数量会减少,这样的排列称为循环排列圆排列

定理2(圆排列数的计算)

\(n\) 元素集合的循环 \(r\) 排列的数量为 \(\large Q^{r}_{n}=\frac{P(n,r)}{r}=\frac{n!}{r\times (n-r)!}\)

  • 特别的,$$n$$ 个元素的循环排列数量为 \((n-1)!\)
  • 证明:一个循环排列对应 \(r\) 个线性排列,如果按照循环排列将线性排列划分为若干个部分,则每一部分的线性排列数量为 \(r\) ,因此循环排列数量可以通过除法原理得出。

但是如果不满足均分,就不能这样使用。

此时可以使用另一种办法:

  • 对于循环排列,选择一个位置作为队首,那么这就转化成了线性排列,只需要分别求出队首放置数字的方案数以及对应的其余位置的方案数即可。
  • 队首可以根据优先级法则,选择约束比较强的元素。

例子:10人坐一桌,求x和y不能相邻的方案数。

可以使用减法原理+捆绑法。

也可以指定x为队首,然后确定y,然后确定其他人。

项链问题(圆排列+翻转)

我们将循环排列看做是一个圆,因此旋转重合看做是同一个方案,如果看做是一根项链,那么翻转之后也是同一个方案。

圆是平面图形,你只能看正反两面,但是项链不管正着戴还是反着戴都是同一根项链。

如果各个元素不相同,则集合 \(S\)\(r\) 项链的方案数为 \(\frac{Q^{r}_{n}}{2}\)

  • 循环排列和项链更一般的计数方式还有 \(Polya\) 定理和 \(Burnside\) 引理。

康托展开

康托展开其实就是给排列排个序编个号离散化一下。

这里就直接给出题解中对康托展开的介绍:

对于一个 \(1\)\(n\) 的排列\(\large \{a_1,a_2,\cdots,a_n\}\),比它小的排列有这些:

\(\large \sum\limits^n_{i=1}sum_{a_i}\times (n-i)!\)

\(\large sum_{a_i}\),就是在 \(\large a_i\) 后面的元素里比它小的元素个数,即 \(\large \sum\limits_{j=i}^n(a_j<a_i)\)

是不是大家开始一脸懵了呢?没关系,这是正常现象,因为上面那两句压根不是给人看的,咱们还是从一个具体的栗子讲起:

\(2,4,1,5,3\)

看这个排列,怎样求他是第几小的呢?别急,咱们一位一位去考虑

  • 第一位是 \(2\),比它小的就只有一个 \(1\) 了,所以只有 \(1\) 放在这一位,才会比它小,那后面的呢?你爱怎么排怎么排!后面有 \(4\) 个数,所以一共有 \(4!\) 种排列方法,也就是说一共有 \(1\times4!\) 种方法
  • 第二位是 \(4\) ,比它小的有 \(1,2,3\),但是 \(2\) 已经在前面固定了,所以能放在这一位的就只有 \(1,3\)\(2\) 个数,而后面呢,有 \(3\) 个数,就有 \(3!\) 种排列方法,所以一共有 \(2\times3!\) 种方法
  • 第三位的 \(1\) 没有更小的啦,所以一共是 \(0\times2!\) 种方法
  • 第四位在 \(5\) 后面有比 \(5\) 小的 \(3\),一共 \(1\) 个数,\(1\times1!\) 种方法
  • 第五位其实压根都不用考虑了,反正都用过了,要考虑的话也是 \(0\times0!\) 种方法
  • 最后我们再把每一位的加起来:\(1\times4!+2\times3!+0\times2!+1\times1!+0\times0!=36\) 种,所以排名是第 \(37\) 名。
逆康托展开

首先我们通过对原数进行取模和除法运算可以得到每一个 \(sum_{a_i}\) ,也就是后面的比这个数小的个数。

然后就是个后缀知道排名求一个数,直接权值线段树上二分即可。

如果需要了解可以见这道题

代码
#include<bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x){
    x=0;char ch=getchar();bool f=false;
    while(!isdigit(ch)){if(ch=='-'){f=true;}ch=getchar();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    x=f?-x:x;
    return ;
}
template <typename T>
inline void write(T x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10^48);
    return ;
}
#define ll long long
const int N=5e4+5,MOD=998244353;
int n,m,a[N],b[N],c[N],sum[N<<2];
ll fac[N],tfac[N],Ans;
void Build(int x,int l,int r){
	if(l==r) return sum[x]=1,void();
	int mid=l+r>>1;
	Build(x<<1,l,mid),Build(x<<1|1,mid+1,r);
	sum[x]=sum[x<<1]+sum[x<<1|1];
	return ;
}
int Query(int x,int l,int r,int v){
	if(l==r) return sum[x]--,l;
	int mid=l+r>>1;sum[x]--;
	if(sum[x<<1]>=v) return Query(x<<1,l,mid,v);
	return Query(x<<1|1,mid+1,r,v-sum[x<<1]);
}
inline void add(int x,int v){
	for(;x<=n;x+=x&(-x)) c[x]+=v;
	return ;
}
inline int ask(int x){
	int res=0;
	for(;x;x-=x&(-x)) res+=c[x];
	return res;
}
inline void incc(ll &x,ll y){x+=y;if(x>=MOD) x-=MOD;return ;} 
signed main(){
	int t;read(t);fac[0]=tfac[0]=1;
	for(int i=1;i<=5e4;i++) fac[i]=fac[i-1]*i%MOD;
	for(int i=1;i<=25;i++) tfac[i]=tfac[i-1]*i;
	while(t--){
		int op;ll rk;
		read(op),read(n);
		if(op==0){
			memset(c,0,sizeof(c));Ans=0;
			for(int i=1;i<=n;i++) read(a[i]);
			for(int i=n;i>=1;i--) incc(Ans,1ll*ask(a[i])*fac[n-i]%MOD),add(a[i],1);
			write(Ans+1);
		}
		else{
			read(rk);rk--;
			for(int i=1;i<=n;i++){
				if(n-i<=25) a[i]=rk/tfac[n-i],rk%=tfac[n-i];
				else a[i]=0;
			}
			memset(sum,0,sizeof(sum));
			Build(1,1,n);
			for(int i=1,x;i<=n;i++) write(Query(1,1,n,a[i]+1)),putchar(' ');
		}
		putchar('\n');
	}
    return 0;
}
任意模数的可重集合康托展开

详见题目:P3477 [POI2008]PER-Permutation

可以使用 \(crt\) 来合并,然后可重集合就是除掉顺序即可(即除法原理消序)。

\(cls\) 的题解,暂时不太懂为什么是 \(1\log\)

多重集合的排列

多重集合排列可以用来处理集合元素可以重复的有序放置问题。

定理1

\(S\) 是有 \(k\) 种不同类型对象的多重集合,每一个元素都有无限重复数,那么 \(S\) 的多重排列数量为 \(k^r\)

证明:使用乘法原理即可。

定理2

设多重集合 \(S\)\(k\) 种不同的对象,且每种类型的重复数有限,为 \(n_i\) ,若 \(S\) 的大小为 \(\large \sum\limits_{i=1}^{k}{n_i}\) ,则多重集合 \(S\) 的全排列数量记为:

\(\large \dbinom{n}{n_1,n_2,n_3...n_k}=\dfrac{n!}{n_1!n_2!...n_k!}\)

称为多重组合数

证明:

我们考虑直接用我们原本的方式根据乘法原理来计算:

\(\large \dbinom{n}{n_1}\dbinom{n-n_1}{n_2}...\dbinom{n-\sum\limits_{i=1}^{k-1}{n_i}}{n_k}=\frac{n!}{n_1!n_2!...n_k!}\)

  • 特别地,如果 \(k=2\) ,则 \(\dfrac{n!}{n_1!n_2!}=\dbinom{n}{n_1}\)
  • \(\dbinom{n}{m}=\dbinom{n}{m,n-m}\)
定理3

\(n_i\) 为正整数并且 \(\large \sum\limits_{i=1}^{k}{n_i}=n\)

\(n\) 集合划分为 \(k\) 个有标签的部分,第 \(i\) 个部分含有 \(n_i\) 个对象,则划分数为 \(\large \dfrac{n!}{n_1!n_2!...n_k!}\)

如果各部分没有标签,且 \(n_1=n_2=...=n_k\) ,则划分数为 \(\large \dfrac{n!}{k!n_1!n_2!...n_k!}\)

如果 \(n_i\) 互相不等,且有 \(m_1\)\(n_1\) 大小的,\(m_2\)\(n_2\) 大小的 \(...\) 则划分数为 \(\large \dfrac{n!}{m_1!n_1!m_2!n_2!...m_k!n_k!}\)

棋盘上车的放置问题

两个车相互可以攻击当且仅当这两个车处在同一行或者同一列当中。

例子1

一个 \(8\times 8\) 的棋盘,要放置 \(8\) 个车的方案数。

分析:首先肯定是一行一个车,于是每一个车的坐标可以写成 \((1,y_1),(2,y_2),(3,y_3)...\) 这样的形式。

同理 \(y_i\) 肯定构成一个 \(1-8\) 的排列,那么相当于全排列问题,答案是 \(8!\)

例子2

一个 \(8\times 8\) 的棋盘,要放置 \(8\) 个车,并且每个车都有其互不相同的颜色的方案数。

分析:首先还是可以得出 \(n!\) ,但是这里有了标号,于是根据乘法原理直接再对这些车内部作全排列即可。

答案是 \((8!)^2\)

例子3

一个 \(8\times 8\) 的棋盘,要放置 \(8\) 个车,并且有一个红色车,三个蓝色车,四个黄色车的方案数。

分析:首先还是可以得出 \(n!\) ,但是这里有了标号,于是根据乘法原理直接再对这些车内部作全排列即可。

答案是 \(\dfrac{(8!)^2}{1!3!4!}\)

定理1

\(k\) 种颜色一共 \(n\) 个车,第 \(i\) 种颜色有 \(n_i\) 个,在 \(n\times n\) 棋盘的合法放置数为:

\(\large n!\dfrac{n!}{n_1!n_2!...n_k!}=\dfrac{(n!)^2}{n_1!n_2!...n_k!}\)

  • 特别的,如果颜色互不相同,为 \((n!)^2\) ,如果都相同,为 \(n!\)

组合

对于无序的选择或者放置,我们称为组合

集合的组合

集合的组合:表示集合 \(S\) 中元素的一个无序选择。

选择的结果会构成一个 \(S\) 的子集 \(A\),因此 \(S\) 的一个组合就是 \(S\)子集的一种选择方案。

这意味着组合和子集本质上是等价的,因此通常使用子集来描述一种无序选择。

\(r\) 组合:\(S\)\(n\) 个对象中选择 \(r\) 个对象的一个无序选择。

\(r\) 组合也被称作 \(S\)\(r\) 子集,即由 \(S\)\(n\) 个对象中的 \(r\) 个对象构成的子集。

\(r\) 子集的数量记作:\(\large \dbinom{n}{r}\) 或者 \(\large C^{m}_{r}\) 或者 \(\large C(n,r)\)

  • 特别的:
  • 如果 \(\large r>n\) ,则 \(\large\dbinom{n}{r}\)\(\large \ =0\)
  • 如果 \(\large r>0\) ,则 \(\large\dbinom{0}{r}\)\(\large \ =0\)
  • \(\large\dbinom{n}{0}\)\(\large \ =1\)\(\ \large\ \ \ \ \dbinom{n}{1}\)\(\large \ =n\)\(\large \ \ \ \ \ \dbinom{n}{n}\)\(\large \ =1\)\(\large \ \ \ \ \ \dbinom{0}{0}\)\(\large \ =1\)

定理1(组合数的计算)

对于 \(\large 0\le r\le n\) ,有 \(\large P(n,r)=r!\dbinom{n}{r}\) ,因此 \(\large \dbinom{n}{r}=\frac{n!}{r!(n-r)!}\)

  • 证明:生成一个 \(S\)\(r\) 排列,可以先选出 \(r\) 个元素,然后 按照某种顺序排列,根据乘法原理可证。
推论1(补集的个数)

\(\large \dbinom{n}{r}=\dbinom{n}{n-r}\)

  • 证明显然。
推论2(区间取数要求非零数单增)

从区间 \([0,L]\) 当中取出 \(n\) 个数,要求非零数严格递增,则方案数为 \(\large \dbinom{L+n}{n}\)

  • 证明:\(0\) 可以选择任意多个,因此可以将原序列换为 \(0,0...0,1,2,3...L\) ,由于非零数严格递增,从新序列中选择 \(n\) 个数字,其中的 \(0\) 代表 \(0\) 的个数,非零数排序即对应一种方案。

定理2(帕斯卡公式,杨辉三角求组合数,组合数递推公式)

对于任意的 \(1\le k \le n-1\) ,有:

\(\large \dbinom{n}{k}=\dbinom{n-1}{k}+\dbinom{n-1}{k-1}\)

  • 数学证明:
  • \(\large \dbinom{n-1}{k}+\dbinom{n-1}{k-1}=\frac{(n-1)!}{k!(n-1-k)!}+\frac{(n-1)!}{(k-1)!(n-k)!}=(n-1)!\frac{n-k+k}{k!(n-k)!}=\dbinom{n}{k}\)
  • 组合证明:
  • 我们可以考虑“分类”来做,使用加法原理,分成“选”最后一个和“不选”最后一个两类,然后前者就是第一项,后者显然是第二项,那么答案就是两者作加法了。
推论1(上指标递增下指标不变)

\(\large \sum\limits^{n}_{i=k}{\dbinom{i}{k}}=\dbinom{n+1}{k+1}\)

  • 证明:
  • 考虑数学归纳,当 \(n=k\) 时,显然等式成立。
  • 若已知 \(n\) 的时候满足,则 \(n+1\) 满足:
  • \(\large \sum\limits_{i=k}^{n+1}{\dbinom{i}{k}}=\sum\limits_{i=k}^{n}{\dbinom{i}{k}}+\dbinom{n+1}{k}=\dbinom{n+1}{k+1}+\dbinom{n+1}{k}=\dbinom{n+2}{k+1}\)
推论2(上下指标差不变)

\(\large \sum\limits_{i=0}^{m}{\dbinom{i+n}{i}}=\dbinom{n+m+1}{m+1}\)

  • 证明:
  • \(\large \sum\limits_{i=1}^{m}{\dbinom{i+n}{i}}+\dbinom{n+1}{0}=\sum\limits_{i=2}^{m}{\dbinom{i+n}{i}}+\dbinom{n+2}{1}=...=\dbinom{n+m+1}{m+1}\)

定理3(子集个数和)

\(\large \dbinom{n}{0}+\dbinom{n}{1}+...+\dbinom{n}{n}=\sum\limits_{i=0}^{n}{\dbinom{n}{i}}=2^n\) 并且这个结果为 \(n\) 元素集合的子集数量。

  • 使用两种办法计算 \(n\) 元素集合的子集数量
  • 法一:\(S\) 的子集是所有子集的和,那么根据加法原理来划分,则 \(\large |S|=\dbinom{n}{0}+\dbinom{n}{1}+...+\dbinom{n}{n}\)
  • 法二:对于每一个元素,是否选入子集都会导致子集不同,因此每一个元素有两种选择,根据乘法原理,子集总数量为 \(\large |S|=2\cdot 2...\cdot 2=2^n\)
  • 子集数量相等,因此两个柿子相等。

其余指标运算

结论1

\(\large \dbinom{n}{m}\dbinom{m}{r}=\dbinom{n-r}{m-r}\dbinom{n}{r}\)

数学证明:直接爆算。

组合意义:\(n\) 个元素选 \(m\) 个作为集合 \(A\) ,再从 \(A\) 中选择 \(r\) 个元素作为 \(B\) ,等价于先从 \(n\) 个元素选择 \(r\) 个作为 \(B\) ,再选出 \(m-r\) 个和 \(B\) 合并作为 \(A\)

结论2

\(\large m\dbinom{n}{m}=n\dbinom{n-1}{m-1}\)

数学证明:爆算。

组合证明:双计数思想, \(n\) 集合的 \(m\) 排列的大小为 \(|S|\)

多重集合的组合

多重集合 \(S\)\(r\) 组合是 \(S\)\(r\) 个对象的无序选择的结果,是 \(S\) 的大小为 \(r\) 的多重子集,简称多重 \(r\) 子集。

  • 习惯上而言,集合 \(S\)\(r\) 组合称为 \(r\) 子集,多重集合的 \(r\) 组合称为 \(r\) 组合。
定理1

设多重集合 \(S\)\(k\) 种类型的对象,每种类型均有无限的重复数,那么 \(S\)\(r\) 组合个数为 \(\large \dbinom{r+k-1}{r}=\dbinom{r+k-1}{k-1}\)

证明: \(S\) 的任意 \(r\) 多重子集可以唯一表示为多重集合 \(\{x_1\cdot a_1,x_2\cdot a_2,...,x_k\cdot a_k\}\) ,且 \(x_1+x_2+...+x_k=r\) ,因此多重子集的数量等价于 \(x_1+x_2+...+x_n=r\) 的非负整数解的数量。

推论:取自 \([1,k]\) 的长度为 \(r\) 的非递减序列个数为 \(\dbinom{r+k-1}{r}\)

插板法

如果需要求若干个相同元素的分组方案数,可以使用插板法。

\(n\) 个元素划分为 \(m\) 个带标号部分,使得每一个部分非空的方案数,因此我们只需要在 \(n-1\) 个位置当中插入隔板,自然就可以划分出来。

而每一种隔板放置办法显然唯一对应一种方案,即 \(\dbinom{n-1}{m-1}\)

推论1

\(\large x_1+x_2+...+x_n=S\)正整数解数量为 \(\dbinom{S-1}{n-1}\)

  • 正整数解也可以描述为每一类至少存在一个元素。
推论2

\(\large x_1+x_2+...+x_n=S\)非负整数解数量为 \(\dbinom{S+n-1}{n-1}\)

  • 只需要给每一个 \(x_i\) 加上 \(1\) ,给 \(S\) 加上 \(n\) 即转化为推论 \(1\)
推论3

\(\large x_1+x_2+...+x_n\le S\)正整数解数量为 \(\dbinom{S}{n}\)

  • 数学证明:枚举总和,根据推论 \(1\) 可以得到:\(\large \sum\limits_{i=n}^{n}{\dbinom{i-1}{n-1}}=\dbinom{S}{n}\)
引理1

从区间 \([0,L]\) 中选取 \(n\) 个数的多重排列,要求非零数字严格递增,则方案数为 \(\large \sum\limits_{i=0}^n{\dbinom{L}{i}\dbinom{L-i+n}{n}}=\dbinom{L+n}{n}\)

注意:\(1,0,2\) 是合法的。

  • 证明:咕咕咕。

换元法

组合数每种类型对象出现次数的下界,可以通过变量替换来处理。

  • 不妨设 \(x_i\ge s_i\) ,则方程 \(x_1+x_2+...+x_n=S\) 的解等价于 \(y_1+y_2+...+y_n=S-\sum\limits_{i=1}^n{s_i}\) ,其中 \(y_i=x_i-s_i\)
  • 如果给出的是次数上界,应该使用容斥原理求解。

二项式系数

杨辉三角(帕斯卡三角形)

性质

根据 \(\dbinom n0 =\dbinom nn =1\) 以及帕斯卡公式: \(\large \dbinom{n}{k}=\dbinom {n-1}k+\dbinom {n-1}{k-1}\) ,我们可以不使用定义式计算所有的组合数。

计算的结果可以列成三角形的形式,称为杨辉三角或者帕斯卡三角形。

对称性

\(\large \dbinom nk=\dbinom n{n-k}\)

行求和

\(\large \sum\limits_{i=0}^{n}\dbinom ni=2^n\)

斐波那契组合表示

我们对杨辉三角斜线上的数求和可以得到斐波那契数列。

\(\large F_{n+1}=\sum\limits_{k=0}^n{\dbinom {n-k}k}\)

另一种组合意义

一个三角形从左上角走,只能往左下或者右下走,到达 \((n,k)\) 的方案就是 \(\dbinom nk\)

二项式定理

定理1(二项式定理)

\(\large (x+y)^n=x^n+\dbinom n1 x^{n-1}y+\dbinom n2x^{n-2}y^2+...+\dbinom{n}{n-1}xy^{n-1}+y^n=\sum\limits_{k=0}^n\dbinom nk x^{n-k}y^k\)

组合证明:

\(\large (x+y)^n=(x+y)(x+y)...(x+y)\) ,共 \(n\)\((x+y)\) 相乘。

根据乘法分配率,最终结果的每一项都是由每一个括号的 \(x\) 或者 \(y\) 得到,也就是说每一项中,每一个括号可以提供一个 \(x\) 或者 \(y\)

所以合并同类项后, \(x^{n-k}y^k\) 的个数等价于在 \(n\) 个括号中选择 \(k\) 个括号提供因子 \(y\) ,即 \(\dbinom nk\)

数学归纳法证明:

\(n=1\) ,显然成立。

不妨设对于 \(n\) 以内的数字成立,证明 \(n+1\) 时成立:

\(\large (x+y)^{n+1}=(x+y)(x+y)^n=(x+y)(\sum\limits_{k=0}^n{\dbinom nk x^{n-k}y^k})=\sum\limits_{k=0}^n{\dbinom nk x^{n-k+1}y^k}+\sum\limits_{k=0}^n{\dbinom nk x^{n-k}y^{k+1}}\)

\(\large =\dbinom n 0 x^{n+1}+\sum\limits_{k=1}^n{\dbinom nk x^{n-k+1}y^{k}}+\sum\limits_{k=0}^{m-1}{\dbinom nk x^{n-k}y^{k+1}}+\dbinom nn y^{n+1}=x^{n+1}+\sum\limits_{k=1}^n{(\dbinom nk + \dbinom n{k-1})x^{n-k+1}y^{n+1}}\)

利用帕斯卡公式:

\(\large =\dbinom {n+1}0 x^{n+1}+\sum\limits_{k=1}^n{\dbinom {n+1}kx^{n-k+1}y^{k}}+\dbinom {n+1}{n+1}y^{n+1}=\sum\limits_{k=0}^{n+1}{\dbinom {n+1}k x^{n+1-k}y^k}\)

其余形式

\(\large (x+y)^n=\sum\limits_{k=0}^n{\dbinom n{n-k}x^{n-k}y^k}\)

\(\large (x+y)^n=\sum\limits_{k=0}^n{\dbinom n{n-k}x^{k}y^{n-k}}\)

\(\large (x+y)^n=\sum\limits_{k=0}^n{\dbinom n{k}x^{k}y^{n-k}}\)

定理2

\(\large (1+x)^n=\sum\limits_{k=0}^n\dbinom nk x^k=\sum\limits_{k=0}^n{\dbinom n {n-k}x^k}\)

其余形式

\(\large (1-x)^n=\sum\limits_{k=0}^n{(-1)^k\dbinom nk x^k}\)

\(\large (x-1)^n=\sum\limits_{k=0}^n{(-1)^k\dbinom nk x^{n-k}}\)

推论1

二项式系数和

\(x=y=1\) ,则 \(\large \sum\limits_{i=0}^n\dbinom ni=2^n\)

二项式系数交错和

\(x=1,y=-1\) ,则 \(\large \sum\limits_{i=0}^n(-1)^i\dbinom ni =[n=0]\)

  • \(\large \dbinom n0 +\dbinom n2+...=\dbinom n1+\dbinom n3 +...=2^{n-1}\)
  • 这代表 \(n\) 元素集合偶数个元素的子集个数等价于奇数个元素的子集数目。

组合意义证明:

不管构成奇数还是偶数,我们前 \(n-1\) 个数都可以 选/不选,但是最后一个是必须由前面确定的,所以都是 \(2^{n-1}\)

定理3

\(\large m^2=2\dbinom m2+\dbinom m1\)

组合证明:

可以看做: \(\large \dbinom m1\dbinom m1=\dbinom 21\dbinom m2+\dbinom m1\)

推论1(自然数平方和)

\(\large \sum\limits_{i=1}^n{i^2}=1+2\sum\limits_{i=2}\)

推论2(自然数立方和)

二项式定理求导

二项式定理连续求导

原式: \(\large (1+x)^n=\sum\limits_{k=0}^n{\dbinom nk x^k}\)

一次导: \(\large n(1+x)^{n-1}=\sum\limits_{k=1}^n{k\dbinom nk x^{k-1}}\)

二次导: \(\large n(n-1)(1+x)^{n-2}=\sum\limits_{k=2}^n{k(k-1)\dbinom nk x^{k-2}}\)

\(p\) 次导: \(\large n(n-1)...(n-p+1)(1+x)^{n-p}=\sum\limits_{k=p}^n{k(k-1)...(k-p+1)\dbinom nk x^{k-p}}\)

推论1(带权和)

\(\large \sum\limits_{i=0}^n{i\dbinom ni =n2^{n-1}}\)

证明1:

由于 \(k\dbinom nk =n\dbinom {n-1}{k-1}\) ,因此 \(\large \sum\limits_{i=0}^n{i\dbinom ni}=\sum\limits_{i=1}^n{n\dbinom {n-1}{i-1}}=n2^{n-1}\)

证明2:

观察 \(n2^{n-1}\) ,很容易发现这就是 \(2^n\) 求导得到。

(注:如果我们想得到系数类似 \(n\)\(n(n-1)\) \(...\) 的系数,可以考虑多次求导得到 )

于是两边同时求导: \(\large n(1+x)^{n-1}=\sum\limits_{k=0}^n{k\dbinom nk x^{k-1}}\)

代入 \(x=1\) 即可。

二项式定理交替求导

一次导\(\large n(1+x)^{n-1}=\sum\limits_{k=0}^n{k\dbinom nk x^{k-1}}\)

同乘 \(x\)\(\large nx(1+x)^{n-1}=\sum\limits_{k=0}^n{k\dbinom nk x^k}\)

二次导\(\large n(1+x)^{n-1}+n(n-1)x(1+x)^{n-2}=\sum\limits_{k=0}^n{k^2\dbinom nk x^{k-1}}\)

\(\large \to n(1+nx)(1+x)^{n-2}=\sum\limits_{k=0}^n{k^2\dbinom nk x^{k-1}}\)

可以看出,通过交替求导和乘 \(x\) ,可以得到任意 \(\large \sum\limits_{i=1}^n{k^p\dbinom nk}\)

推论1

对一次导代入 \(x=1\)\(\large n2^{n-1}=\sum\limits_{k=1}^nk\dbinom nk\)

推论2

对二次导代入 \(x=1\)\(\large n(n+1)2^{n-2}=\sum\limits_{k=0}^n{k^2\dbinom nk}=\sum\limits_{k=1}^n{k^2\dbinom nk}\)

组合证明:

原式等于 \(\large n2^{n-1}+n(n-1)2^{n-2}=\sum\limits_{k=1}^n{k^2}\dbinom nk\)

右侧为 \(n\) 个元素的所有非空 \(k\) 子集,子集中选出两个元素作为 \(X\)\(Y\)

左侧就是把该方案划分为 \(X,Y\) 相等和不相等两部分。

如果相等,就先选择一个元素,那么该子集其他项可以随意选择 有/没有。

如果不相等,就先选出 \(X,Y\) ,然后再选择其他项,最后根据加法原理,得到左侧。

推论3

\(\large \sum\limits_{k=1}^n(-1)^kk\dbinom nk=0\)

二项展开积分

\(\large \sum\limits_{k=0}^n\dfrac {\dbinom nk}{k+1}x^{k+1}=\dfrac{(1+x)^{n+1}-1}{n+1}\)

证明:\(\large \sum\limits_{k=0}^n{\dbinom nk x^k=(1+x)^n}\) ,然后积分即可,因为发现 \(x=0\) 时右侧多了一个 \(\frac{1}{n+1}\) ,于是给右边补足一个 \(-1\)

推论1

\(\large \sum\limits_{k=0}^n(-1)^k\dfrac{\dbinom nk}{k+1}x^{k+1}=\dfrac{1-(1-x)^{n+1}}{n+1}\)

推论2

代入 \(x=1\) ,得到 \(\large \sum\limits_{k=0}^n{\dfrac{\dbinom nk}{k+1}}=\dfrac{2^{n+1}-1}{n+1}\)

范德蒙德卷积公式

对于所有正整数 \(m_1,m_2,n\) ,有:

\(\large \sum\limits_{k=0}^n{\dbinom {m_1}k}\dbinom {m_2}{n-k}=\dbinom {m_1+m_2}n\)

组合证明:

数学证明:

推论1(二项式系数平方和)

\(\large \sum\limits_{k=0}^n{\dbinom nk}^2=\dbinom {2n}n\)

证明:

推论2(分拆式)

\(\large \sum\limits_{k=0}^m{\dbinom nk \dbinom m{m-k}}=\dbinom {n+m}m\)

推论3

\(\large \sum\limits_{k=0}^n{(-1)^k\dbinom nk ^2}\left\{\begin{matrix}0,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ n=2m+1\\ (-1)^m\dbinom {2m}{m},\ \ \ n=2m \end{matrix}\right.\)

证明:

考虑 \((1-x^2)^n=(1+x)^n(1-x)^n\),分别二项式展开,\(x^n\) 项的系数对应相等。

因此左侧的为 \(\dbinom n {\frac{n}{2}}(-1)^{\frac{n}{2}}x^n\)

右侧为 \(\large \sum\limits_{k=0}^n{\dbinom nk x^k}\cdot \dbinom n{n-k}(-1)^{n-k}x^{n-k}=\sum\limits_{k=0}^n{(-1)^k\dbinom nk^2 x^n}\)

如果 \(n\) 为奇数,则该项不存在,因此为 \(0\)

推论4

\(\large \sum\limits_{r+s+t=n}{\dbinom {m_1}r\dbinom {m_2}s\dbinom {m_3}t}=\dbinom {m_1+m_2+m_3}n\)

组合证明:

推论5

\(\large \sum\limits_{k=1}^n{k\dbinom nk ^2 = n\dbinom {2n-1}{n-1}}\)

组合证明:

左侧为在 \(n\) 元素集合 \(S_1\)\(S_2\) 分别选出一个 \(k\) 子集和 \(n-j\) 子集,然后在 \(S_1\)\(k\) 子集中选择一个元素作为 \(X\)

等价于在 \(2n\) 个元素中直接选择一个作为 \(X\) ,从剩下的元素中选择 \(n-1\) 个元素。

推论6

\(\large \sum\limits_{k=1}^n{\dbinom nk \dbinom n{k-1}=\dfrac 1 2\dbinom {2n+2}{n+1}-\dbinom {2n}n}\)

组合证明:

例题

排列组合推导

BSOJ3422 最短路(组合数递推/走网格)

BSOJ3422【模拟试题】最短路

容易发现这其实是杨辉三角的一部分,最短路其实是确定的,沿这个矩形外围的一圈走,且一开始往较长的那一边走。

那么答案就是 \(\large m+1+\sum _{i=1}^{n}{\dbinom {m+i}{i}}=m+\dbinom{n+m+1}{n+1}\)

我们容易发现 \(\large \dbinom {m+i}{i}\times \dfrac {m+i+1} {i+1}=\dbinom {m+i+1}{i+1}\) 于是上一项可以推出下一项,那么答案直接求即可。

组合意义推导

计数dp

posted @ 2021-08-16 21:25  __Anchor  阅读(356)  评论(0)    收藏  举报