跳转至

组合数学

组合数学是一门古老而迷人的学科。 传说早在 114514\texttt{114514} 年前, 一位名为忆哀的神灵来到地球, 发现了人类——另一种有智慧的物种。 她觉得这很有趣,为了加速人类文明的发展, 她向人间传下了一类计数问题——十二重计数, 这也正是组合数学的开端。 而只有搞明白这类问题,才能在组合数学上继续深入。

基础内容

四大原理

加法原理:分类相加,

N=mn N=\sum m_n

乘法原理:分步相乘,

N=mn N=\prod m_n

减法原理:正难则反,

A=SSA,AS |A|=|S|-|S\setminus A|,A\subseteq S

除法原理:反悔划分。

这玩意想不明白回初赛重造。

注:本文将会偶尔用到大型运算符,不清楚的见我数列进阶。

经典例题

  • ABA\to B22 条路,BDB\to D33 条路;
  • ACA\to C44 条路,CDC\to D55 条路。

问:从 ADA\to D 一共有几条路?

解:

2×3+4×5=26 2\times3+4\times5=26

完毕!

经典应用:因数个数

例题,21602160 有多少个不同的正因数。

分解质因数,

2160=2×5×216=24×5×27=24×33×5 \begin{aligned} 2160&=2\times5\times 216\\ &=2^4\times5\times 27\\ &=2^4\times3^3\times5 \end{aligned}

注意到每一个指数一次比他小的都是其因数,

因数个数,

(4+1)(3+1)(1+1)=40 (4+1)(3+1)(1+1)=40

In general:

N=p1c1p2c2pkck N=p_1^{c_1}p_2^{c_2}\dots p_k^{c_k}

对于,

piP,pipj(ij) \forall p_i\in\mathbb P,p_i\neq p_j(i\neq j)

那么,任意,

M=p1b1p2b2pkbk M=p_1^{b_1}p_2^{b_2}\dots p_k^{b_k}

对于,

bici \forall b_i\le c_i

MM 都是 NN 的因数,因数个数为,

cnt=(c1+1)(c2+1)(ck+1) \mathit{cnt}=(c_1+1)(c_2+1)\dots(c_k+1)

经典应用:子集个数

对于集合,

A={1,2,3,,10} A=\{1,2,3,\dots,10\}

其子集个数是多少?

对于每一个数,其要么出现在子集中,要么不出现,

因此,子集个数,

210 2^{10}

In general:

大小为 NN 的集合,其,

  • 子集个数:2N2^N
  • 真子集个数:2N12^N-1
  • 非空子集个数:2N12^N-1
  • 非空真子集个数:2N22^N-2

排列数和组合数

排列数

定义,排列数为 A(n,m)A(n,m) 表示:

  • nn 个物品中,选出 mm 个进行排列的方案数。

也记为,AnmA\begin{smallmatrix}n\\m\end{smallmatrix},但是这样太麻烦了,我不喜欢(

早年时期也记为 P(n,m)P(n,m),P 表示 Permutation(排列)。

定义式

按照定义,我们一次分析第 ii 个选哪个,

i方案数1n2n13n2mnm+1 \def\arraystretch{1.2} \begin{array}{|c|c|}\hline \bm{i}&\small\texttt{方案数}\\\hline 1&n\\\hline 2&n-1\\\hline 3&n-2\\\hline \dots&\dots\\\hline m&n-m+1\\\hline \end{array}

因此,总方案数,

A(n,m)=n(n1)(n2)(nm+1) A(n,m)=n(n-1)(n-2)\dots(n-m+1)

这个是经典公式,即,

  • nn 开始,往下数 mm 个相乘。

我们知道阶乘的定义为,

x!=x(x1)(x2)1 x!=x(x-1)(x-2)\dots1

因此,类似的,

A(n,m)=n!(nm)! \boxed{A(n,m)={n!\over(n-m)!}}

由此,当 m=nm=n 时,

A(n,n)=n!=n(n1)(n2)1 A(n,n)=n!=n(n-1)(n-2)\dots1

注意到其实后面的 11 没啥用(

特殊的,我们定义,

0!=1 0!=1

而一般默认 A(n,m)A(n,m)nmn\ge m,若大于了,规定为零。

至于为什么这么定义,从组合意义上是显然的,也可以参见下降幂。

组合数

定义,组合数为 C(n,m)C(n,m) 表示:

  • nn 个物品中,选出 mm 个进行排列的方案数。

也记为 CnmC\begin{smallmatrix}n\\m\end{smallmatrix},C 表示 Combination(组合),学术上一般记为,

(nm) {n\choose m}

定义式

有些教材会先讲组合数,原因就是,

我们在排列中,从 nn 个物品中选择 mm 个进行排列,

这个本质其实是两个步骤,

  1. nn 个物品中选择 mm 个,即 C(n,m)C(n,m)
  2. 将这 mm 个进行排列,即 A(m,m)=m!A(m,m)=m!

因此,

A(n,m)=C(n,m)×A(m,m) A(n,m)=C(n,m)\times A(m,m)
C(n,m)=A(n,m)A(m,m)=n!(nm)!m! \boxed{C(n,m)={A(n,m)\over A(m,m)}={n!\over(n-m)!m!}}

这个思路其实更加连贯。

拓展

有,m!m! 整除任何连续的 mm 个整数的乘积。

证明,构造组合数。

一些性质

注意到组合数有更好的性质,所以下面主要是组合数的性质,


从定义可得,

(nm)=(nnm)(1) \boxed{\tag1{n\choose m}={n\choose n-m}}

nn 个里面选 mm 个,等价于找出来 nmn-m 个不选。


同样是定义得出,

(nm)=nm(n1m1)(1 II) \boxed{{n\choose m}={n\over m}{n-1\choose m-1}\tag{1 II}}

因此我们打了一个可爱的 Tag.


同样是定义得出,

(nm)(mk)=(nk)(nkmk)(1 III) \boxed{{n\choose m}{m\choose k}={n\choose k}{n-k\choose m-k}}\tag{1 III}

表示 nnmmmmkk 表示 nn 直接选 kk 然后再把 mkm-k 补回去。

因此我们又打了一个可爱的 Tag.


经典递推式,

(nm)=(n1m)+(n1m1)(2) \boxed{\tag2{n\choose m}={n-1\choose m}+{n-1\choose m-1}}

相当于 nn 个选 mm 个,分讨其中一个选不选,可用于裂项。


另外有类比上面的,

Anm=An1m+mAn1m1(2 II) \boxed{A_n^m=A_{n-1}^m+mA_{n-1}^{m-1}\tag{2 II}}

相当于 nn 个选 mm 个进行排列,分讨第 nn 个选不选。


下面是一些用到了大型运算符的性质,

i=0n(ni)=2(3) \boxed{\sum_{i=0}^n{n\choose i}=2\tag3}

表示从 nn 个中,任意选 0n0\sim n 个,自然就是 2n2^n 种。


一个裂项的题。

i=m2m(im)=(2m+1m)(4) \boxed{\sum_{i=m}^{2m}{i\choose m}={2m+1\choose m}\tag4}

考虑裂项,

(2m+1m)=(2mm)+(2mm1)=(2mm)+(2m1m1)+(2m1m2)= {2m+1\choose m}={2m\choose m}+{2m\choose m-1}={2m\choose m}+{2m-1\choose m-1}+{2m-1\choose m-2}=\dots

用大型运算符表示,注意到选 00 个可以随便换。

(2m+1m)=i=0m1(2mimi)+(m+10)=i=0m(2mimi) {2m+1\choose m}=\sum_{i=0}^{m-1}{2m-i\choose m-i}+{m+1\choose 0}=\sum_{i=0}^m{2m-i\choose m-i}

对里面的应用 (1)(1),得到,

(2m+1m)=i=0m(2mim)=0im(2mim) {2m+1\choose m}=\sum_{i=0}^m{2m-i\choose m}=\sum_{0\le i\le m}{2m-i\choose m}

应用一些技巧(注意到 2mi2m-i 是的一个 Permutation),

(2m+1m)=02mim(2m(2mi)m)=i=m2m(im) {2m+1\choose m}=\sum_{0\le 2m-i\le m}{2m-(2m-i)\choose m}=\sum_{i=m}^{2m}{i\choose m}

Q.E.D.

同样的,两边乘上 m!m! 就得到了排列的版本。

补充:解方程问题

解方程,

(na)=(nb) {n\choose a}={n\choose b}

首先,若,

a=b a=b

那么是显然的,否则,应用性质 (1)(1),得,

a+b=n a+b=n

自然也是显然的。

二项式定理

基本形式

(a+b)n=i=0n(ni)anibn \boxed{(a+b)^n=\sum_{i=0}^n{n\choose i}a^{n-i}b^n}

b=1b=1 可以得出最能体现性质的形式,

(a+1)n=i=0n(ni)an \boxed{(a+1)^n=\sum_{i=0}^n{n\choose i}a^n}

二项式定理也可以很容易扩展为多项式的形式:

(x1++xk)n=n1++nk=n(nn1,,nk)x1n1xnnk \boxed{(x_1+\dots+x_k)^n=\sum_{n_1+\dots+n_k=n}{n\choose n_1,\dots,n_k}x_1^{n_1}\dots x_n^{n_k}}

有性质,

n1++nk=n(nn1,,nk)=kn \boxed{\sum_{n_1+\dots+n_k=n}{n\choose n_1,\dots,n_k}=k^n}

问:下面这个有什么用?

答:可以用来检验你展开的对不对。

杨辉三角

递推式,

ai,1=ai,i=1ai,j=ai1,j1+ai1,j a_{i,1}=a_{i,i}=1\\ a_{i,j}=a_{i-1,j-1}+a_{i-1,j}

注意到形如组合数的形式,

1121131214133151464161510105171615201561817213535217191828567056288110193684126126843691111104512021025221012045101 \def\qq{\quad} \begin{array}{r|c} 1&1\\\hline 2&1\qq1\\\hline 3&1\qq2\qq1\\\hline 4&1\qq3\qq3\qq1\\\hline 5&1\qq4\qq6\qq4\qq1\\\hline 6&1\qq5\qq10\qq10\qq5\qq1\\\hline 7&1\qq6\qq15\qq20\qq15\qq6\qq1\\\hline 8&1\qq7\qq21\qq35\qq35\qq21\qq7\qq1\\\hline 9&1\qq8\qq28\qq56\qq70\qq56\qq28\qq8\qq1\\\hline 10&1\qq9\qq36\qq84\qq126\qq126\qq84\qq36\qq9\qq1\\\hline 11&1\qq10\qq45\qq120\qq210\qq252\qq210\qq120\qq45\qq10\qq1\\ \end{array}

其中第 ii 行第 jj 个数,表示的是 (a+1)i1(a+1)^{i-1}j1j-1 次项系数。

一些性质

我们讨论二项式系数,

(n0),(n1).,(nn) \boxed{{n\choose 0},{n\choose 1}.\dots,{n\choose n}}

提示:二项式系数只是组合数,但是提到系数就需要把具体的数字的系数乘进去,比如说 (3a+2)2(3a+2)^2 的第一项的二项式系数是 C(2,0)=1C(2,0)=1,但是系数是 32×1=93^2\times1=9

中的单调性,设,

f(n,k)=(nk) f(n,k)={n\choose k}

则若,

q=f(n,k+1)f(n,k) q={f(n,k+1)\over f(n,k)}

考虑化简,

q=f(n,k+1)f(n,k)=n!(k+1)!(nk1)!×k!(nk)!n!=nkk+1 q={f(n,k+1)\over f(n,k)}={n!\over(k+1)!(n-k-1)!}\times{k!(n-k)!\over n!}={n-k\over k+1}

讨论,

  • 函数单增:q>1k<n12q>1\Rightarrow k<\dfrac{n-1}{2}

  • 函数单减:q<1k>n12q<1\Rightarrow k>\dfrac{n-1}{2}

据此,我们得出其单增、单减区间为,

[0,n12],(n12,n] \left[0,{n-1\over2}\right] , \left({n-1\over2},n\right]

应用顶、底函数,化简,

[0,n2],[n2,n] \boxed{ \left[0,\left\lfloor{n\over2}\right\rfloor\right] , \left[\left\lceil{n\over2}\right\rceil,n\right] }

因此注意到,

  • nn 是偶数,那么存在有唯一的极大值点 n/2n/2
  • nn 是奇数,那么存在有 (n+1)/2,(n1)/2(n+1)/2,(n-1)/2 两个极大值点。

一些好玩的题

在,

(x+y)(xy)5 (x+y)(x-y)^5

的展开式中,求下列各式的系数。

我们注意到原式,

(x+y)(xy)5=x(xy)5+y(xy)5 (x+y)(x-y)^5=x(x-y)^5+y(x-y)^5

那么如果要求,

xny6n x^ny^{6-n}

其实就是前一项的 xn1(y)6nx^{n-1}(-y)^{6-n} 的系数,

加上后一项 xn(y)5nx^n(-y)^{5-n} 的系数,就是

(1)6n(56n)+(1)5n(55n)=1n[(56n)(55n)] \begin{aligned} (-1)^{6-n}{5\choose6-n}+(-1)^{5-n}{5\choose5-n}\\ =-1^n\left[{5\choose6-n}-{5\choose5-n}\right] \end{aligned}

好玩吧(?

二项式定理做题套路

我们知道,

(x1,x2,x3)n (x_1,x_2,x_3)^n

展开,相当于考虑每一个 k1+k2+k3=nk_1+k_2+k_3=n

去找,

(nk1,k2,k3)x1k1x2k2x3k3 {n\choose k_1,k_2,k_3}x_1^{k_1}x_2^{k_2}x_3^{k_3}

这么一个贡献,那么我们整理一下,例题:

(x1+px2)6 (x-1+px^2)^6

的展开式中,x5x^5 项系数最大时的 pp 的值。

我们考虑先确定 x5x_5 的系数,我们知道,可行的能配出来的有,

(x1+px2)6(1)132(2)321(3)510 \begin{aligned} &&(x&-&1&+&p&x^2)^6\\\hline (1)& &1& &3& &2&\\ (2)& &3& &2& &1&\\ (3)& &5& &1& &0& \end{aligned}

下面的表示可以配出 x5x^5 的系数。

我们把上标看成一共选几个物品,把下面的看成每类物品提供几个。

那么这几个分别对答案的贡献为,

(1):60p2(2):60p(3):6 \begin{aligned} (1)&:-60p^2\\ (2)&:60p\\ (3)&:-6 \end{aligned}

合在一起系数为,

60p2+60p6 -60p^2+60p-6

取最大值时,

p=12 p={1\over 2}

这是很直观的。

推导组合性质

形式一:

(a+1)n=i=0n(ni)ai \boxed{(a+1)^n=\sum_{i=0}^n{n\choose i}a^i}

带入 a=1a=1

i=0n(ni)=2n \boxed{\sum_{i=0}^n{n\choose i}=2^n}

带入 a=2a=2

i=0n(ni)2i=3n \boxed{\sum_{i=0}^n{n\choose i}2^i=3^n}

带入 a=1a=-1

i=0n(1)i(ni)=[n=0] \boxed{\sum_{i=0}^n(-1)^i{n\choose i}=[n=0]}

上式,假定 n0n\neq0,则,

i=0n(1)i(ni)=0 \sum_{i=0}^n(-1)^i{n\choose i}=0

我们假定 nn 是偶数,那么移项,

(n0)+(n2)++(nn)=(n1)+(n3)++(nn1) {n\choose0}+{n\choose2}+\dots+{n\choose n}={n\choose1}+{n\choose 3}+\dots+{n\choose n-1}

且左右相加等于 2n2^n,那么左右都等于 2n12^{n-1},即,

(n0)+(n2)++(nn)=2n1 {n\choose0}+{n\choose2}+\dots+{n\choose n}=2^{n-1}
(n1)+(n3)++(nn1)=2n1 {n\choose1}+{n\choose 3}+\dots+{n\choose n-1}=2^{n-1}

对于 nn 为正偶数。

类比 nn 为正奇数,

(n0)+(n2)++(nn1)=(n1)+(n3)++(nn) {n\choose0}+{n\choose2}+\dots+{n\choose n-1}={n\choose1}+{n\choose 3}+\dots+{n\choose n}

同理,

(n0)+(n2)++(nn1)=2n1 {n\choose0}+{n\choose2}+\dots+{n\choose n-1}=2^{n-1}
(n1)+(n3)++(nn)=2n1{n\choose1}+{n\choose 3}+\dots+{n\choose n}=2^{n-1}

总结一下,

(n0)+(n2)+=2n1 \boxed{{n\choose0}+{n\choose2}+\dots=2^{n-1}}
(n1)+(n3)+=2n1 \boxed{{n\choose1}+{n\choose 3}+\dots=2^{n-1}}

省略号表示加到小于等于 nn 为止。

但是注意到我们规定的后面都为零,因此当成无限加也可以(

进阶内容

容斥原理

理论

容斥原理是一种应用在集合上的较常用的计数方法,其基本思想是:

先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来(容),

然后再把计数时重复计算的数目排斥出去(斥),使得计算的结果既无遗漏又无重复。

容斥原理的核心计数规则可以叙述为:奇加偶减。

例题,将甲乙丙丁四个老师分配到 ABCD 四个班。

要求甲不能在 A,丁不能在 B,求总分配方案数。

用不考虑限制的方案数,减去甲在 A 的,减去丁在 B 的。

注意到甲在 A 且 丁在 B,我们是减了两边的,因此加上一次,

4!2×3!+2!=242×6+2=14 4!-2\times3!+2!=24-2\times 6+2=14

完毕!

In general:

i=1nAi=S[1,n]Z(1)S1iSAi\def\abs#1{\left\lvert{#1}\right\rvert} \abs{\bigcup_{i=1}^{n}A_i}=\sum_{S\in[1,n]\wedge\mathbb Z}(-1)^{\abs S-1}\abs{\bigcap_{i\in S}A_i}

简化的形式,

ABC=A+B+CABACBC+ABC |A\cup B\cup C|=|A|+|B|+|C|-|A\cap B|-|A\cap C|-|B\cap C|+|A\cap B\cap C|

配合数论知识

众所周知,1n1\sim nkk 的倍数有,

nk \left\lfloor{n\over k}\right\rfloor

好的,你已经会 1+1=21+1=2 了,让我们来看一下这个题,

110001\sim1000 中,有多少个数,既不是 33 的倍数,也不是 55 的倍数。

容易发现,设集合 A=#[ 3 的倍数]A=\#[{\small\sf{是\ 3\ 的倍数}}]B=#[ 5 的倍数]B=\#[{\small\sf{是\ 5\ 的倍数}}],则,

A=10003=333B=10005=200AB=100015=66AB=A+BAB=467 \def\floor#1{\left\lfloor{#1}\right\rfloor} |A|=\floor{1000\over3}=333\\[0.5em] |B|=\floor{1000\over5}=200\\[0.5em] |A\cup B|=\floor{1000\over15}=66\\[0.5em] |A\cap B|=|A|+|B|-|A\cup B|=467

那么我们再取一下补集,答案就是 533533

鸽巢原理

此处不讨论第一、第二鸽巢原理。

n+1n+1 个物体划分为 nn 组,那么有至少一组有两个及以上的物体。

In general:

nn 个物体划分为 kk 组,那么有至少一组有大于等于 nk\left \lceil \dfrac{n}{k} \right \rceil 个物品。

最差原则:即考虑所有可能情况中,最不利于某件事情发生的情况。也就是最差的情况都能被满足,那么其余所有的情况都比最差的要好,连最差的都能满足,则说明其余所有情况也都能满足,也就是任意情况都能满足。

多重集

概念

多重集或可重集是集合概念的推广。

  • 在一个集合中,相同的元素只能出现一次,因此只能显示出有或无的属性。

  • 在多重集之中,同一个元素可以出现多次,因此可以显示出元素的个数。

我们可以将其表示为,

{a1,a1,,a1,a2,} \{a_1,a_1,\dots,a_1,a_2,\dots\}

为了简便,下文中我们这么表示,

{n1a1,n2a2,} \{n_1\cdot a_1,n_2\cdot a_2,\dots\}

多重集的排列数

多重集 S={n1a1,n2a2,,nkak}S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k\} 的全排列个数为,

(nn1,n2,,nk)=n!1ikni {n\choose n_1,n_2,\dots,n_k}={n!\over\prod_{1\le i\le k}n_i}

这个全排列数被称为多重集的排列数,多被称为多重组合数

注意到,

(nm)=(nm,nm) {n\choose m}={n\choose m,n-m}

但是后面的不常用。

n1+n2+=nn_1+n_2+\dots=n 的情况下,

其直观意义就是,从 nn 个中,先选出 n1n_1 个,再选出 n2n_2 个,……。

也就是说,我们用弱化的形式,若 n1+n2+n3=nn_1+n_2+n_3=n

(nn1,n2,n3)=(nn1)(nn1n2)(nn1n2n3) {n\choose n_1,n_2,n_3}={n\choose n_1}{n-n_1\choose n_2}{n-n_1-n_2\choose n_3}

请注意区分,类似

(62,2,2) {6\choose 2,2,2}

和,

(62,2) {6\choose 2,2}

因为其不符合我们上面的和为 nn 的要求。

多重集的组合数

请注意区分多重组合数(多重集的排列数)和多重集的组合数,他们是完全不同的。

我们类推组合数,以及多重集的排列数,定义如下:

有多重集 S={n1a1,n2a2,,nkak}S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k\} ,那么对于整数 rr


rr 满足,r<ni,i[1,k]r<n_i,\forall i\in[1,k](注意这个很重要!),

SS 中选择 rr 个元素组成一个多重集的方案数就是多重集的组合数

这个问题等价于 x1+x2++xk=rx_1+x_2+\dots+x_k=r 的非负整数解的数目,可以用插板法解决,答案为,

(r+k1k1) {r+k-1\choose k-1}

rr 满足,r<n,n=i=1knir<n,n=\sum_{i=1}^kn_i(也就是没有限制了),

则问题可以很容易转化为求解带限制的线性方程,

i[1,k],xini,i=1nxi=r \forall i\in[1,k],x_i\le n_i,\sum_{i=1}^nx_i=r

好,然而这个过于复杂,我们跳过。

圆排列

定义 nn 个人全部来围成一圈,所有的排列数记为 Q(n,n)Q(n,n)

考虑其中已经排好的一圈,从不同位置断开,又变成不同的队列。

所以有,

Q(n,n)=A(n,n)n=n!n=(n1)! Q(n,n)={A(n,n)\over n}={n!\over n}=(n-1)!

我们继续类推,即 Q(n,m)Q(n,m)nnmm 个人排成一圈的方案数,

考虑先分组再分配的方案,

Q(n,m)=C(n,m)Q(m,m)=C(n,m)A(m,m)m=A(n,m)m Q(n,m)=C(n,m)Q(m,m)={C(n,m)A(m,m)\over m}={A(n,m)\over m}

注意到这里和前面是非常融洽的,我们继续,易得,

Q(n,m)=A(n,m)m=n!m(nm)! Q(n,m)={A(n,m)\over m}={n!\over m(n-m)!}

错位排列

错位排列是没有任何元素出现在其有序位置的排列,即,

即,对于 1n1\sim n 的排列 PP,如果对于所有 ii 满足 PiiP_i\neq i,则称 PPnn 的错位排列。

例如,三元错位排列有 {2,3,1}\{2,3,1\}{3,1,2}\{3,1,2\}

我们记 nn 元错位排列的方案数有 DnD_n 种,

有前几项(A000166 - OEIS):1,0,1,2,9,44,2651, 0, 1, 2, 9, 44, 265

以下是其常用性质,有封闭形式,推导略,

Dn=n!k=0n(1)kk! D_n=n!\sum_{k=0}^n{(-1)^k\over k!}

有递推式,

Dn=(n1)(Dn1+Dn2) D_n=(n-1)(D_{n-1}+D_{n-2})

这个是经典形式,一个不严谨的证明:

  • 假定第 nn 个先放在 nn 位置,
  • 若前面的所有已经错位,那么随便找一个,和 nn 交换即可满足要求,方案数 (n1)Dn1(n-1)D_{n-1}
  • 若前面的只剩一个没有错位,那么和这个交换,即可满足条件,方案数 (n1)Dn2(n-1)D_{n-2}
  • 总方案数:Dn=(n1)(Dn1+Dn2)D_n=(n-1)(D_{n-1}+D_{n-2})
  • 可以证明,不存在其他在一步内的构造方案。

还有一些惊人观察力的性质,

PnP_n 表示所有排列中,为错位排列的概率,即,

Pn=DnA(n,n)=Dnn! P_n={D_n\over A(n,n)}={D_n\over n!}

有性质,

limnPn=1e \lim_{n\to\infty}P_n={1\over e}

或者也可以表述为,

P=limnDnn!=1e P=\lim_{n\to\infty}{D_n\over n!}={1\over e}

由此推知,

Dn=n!e D_n=\left\lfloor{n!\over e}\right\rfloor

这一个近似求解。

卡特兰数

概念

卡特兰数可以表示一类组合问题,

其情景有,

  • 如上图,从左下走到右上,不穿过对角线的方案数;

  • nn 个元素,编号 1n1\sim n,出入栈的方案数;

推导

在上述图像中,容易知道,不考虑限制的方案数为,

(2nn) {2n\choose n}

种,表示 2n2n 步中选择 nn 步表示往上走。

考虑不合法情况(右上角),容易发现我们把图像从第一次穿越对角线开始翻折,

一定会最终落在终点的左上角位置,因此,不合法方案数为,

(2nn+1) {2n\choose n+1}

总方案数为,

Cn=(2nn)(2nn+1) \boxed{C_n={2n\choose n}-{2n\choose n+1}}

一个经典公式,考虑继续推导,

Cn=(2nn)(2nn+1)=(2n)!n!n!(2n)!(n+1)!(n1)!=(2n)!n!n!(2n)!n!n!nn+1=1n+1(2n)!n!n!=1n+1(2nn) \begin{aligned} C_n&={2n\choose n}-{2n\choose n+1}\\ &={(2n)!\over n!n!}-{(2n)!\over (n+1)!(n-1)!}\\ &={(2n)!\over n!n!}-{(2n)!\over n!n!}\cdot{n\over n+1}\\ &={1\over n+1}\cdot{(2n)!\over n!n!}\\ &={1\over n+1}{2n\choose n} \end{aligned}

即经典公式,

Cn=1n+1(2nn) \boxed{C_n={1\over n+1}{2n\choose n}}

还有不常用公式,

Cn=Cn14n2n+1 C_n=C_{n-1}\cdot{4n-2\over n+1}

有卡特兰数列(A000108 - OEIS),

1,1,2,5,14,42,132, 1, 1, 2, 5, 14, 42, 132,\dots

Lucas 定理

对于素数 pp

(nm)(nmodpmmodp)(n/pm/p)(modp) {n\choose m}\equiv{n\bmod p\choose m\bmod p}\cdot{\lfloor n/p\rfloor\choose\lfloor m/p\rfloor}\pmod p

或用更不直观的表达(?

对于 n,mn,mpp 进制下有表示,

{n=a0+a1p++akpkm=b0+b0p++bkpk \begin{cases} n&=a_0+a_1p+\dots+a_kp^k\\ m&=b_0+b_0p+\dots+b_kp^k \end{cases}

那么,

(nm)=i=0k(aibi) {n\choose m}=\prod_{i=0}^k{a_i\choose b_i}

可以用于推导一些模意义下的性质。

广义二项式定理

对于实数 nn

(a+b)n=inkk!xnkyk (a+b)^n=\sum_i{n^{\underline k}\over k!}x^{n-k}y^k

似乎用处不大。

常见解题技巧和模型

我会在一个单独的技巧里面穿插一些与其不相关的。

目的是让你知道,模型不是全都直接套的,而是看情况。

(有的时候其实枚举更快(?

特殊优先策略

情景就是你事情最多我就特殊处理你。

不一定是优先,也可以是后置处理(插空法)。

例题一

六个人排队,甲不在排头。

Solution 1:考虑甲只有 55 种方法,剩下五个人排列插入即可。

5×A(5,5)=600 5\times A(5,5)=600

Solution 2:插空法,五个人排好后,甲插入除了开头的一个空。

A(5,5)×C(5,1)=600 A(5,5)\times C(5,1)=600

例题二

六个人排队,甲不在队头,丁(?)不在队尾。

直接插空法,我们先放甲,

A(4,4)×C(4,1)×C(5,1)=480 A(4,4)\times C(4,1)\times C(5,1)=480

但是还有一种情况,甲先选了队头,但是丁插她前面了(?

A(4,4)=24 A(4,4)=24

总答案为,

280+24=504 280+24=504

例题三

六个人排队,甲不在队头,丁不在队尾,且甲丁 xql 不相邻(?。

我们这个做法的优势体现了。

我们还是插空法,先放甲,注意此时出问题了。

我们再分讨,若甲选了队尾,

A(4,4)×C(4,1)=96 A(4,4)\times C(4,1)=96

否则,甲没选队尾,

A(4,4)×C(3,1)×C(3,1)=216 A(4,4)\times C(3,1)\times C(3,1)=216

那么总有。

96+216=312 96+216=312

种。

等效替代策略

当我们需要计算一些带特殊条件的方案数时,可以用一些等价替代的方法。

具体来讲,我们构造一个双射,将每一种原问题的方案映射为新问题的一种方案,并使答案更容易计算。

常用的有捆绑法、插空法、隔板法等。

捆绑法

有七个人站队拍照,甲和乙要求相邻,丙和丁要求相邻,求方案数。

注意到我们把甲和乙替换为他们的儿子,丙和丁替换为他们的女儿,那么我们将这 55 个新人排列,

A55=5×4×3×2×1=120 A_5^5=5\times4\times3\times2\times1=120

然后把儿子替换为甲和乙,把女儿替换为丙和丁,那么这两个小组分别再排列,总答案为,

A55×A22×A22=480 A^5_5\times A^2_2\times A_2^2=480

种,那么这就是捆绑法。

插空法

有七个人拍照,由于甲和乙关系很好,他们要求不相邻,求方案数。

注意到我们先不管甲和乙,排列数,

A55=5×4×3×2×1=120 A_5^5=5\times4\times3\times2\times1=120

然后把甲和乙插进这 55 个人形成的 66 个空中,总答案为,

A55×A22=240 A_5^5\times A_2^2=240

种,那么这就是插空法。

例题:现在五个人顺序已确定,插入两人,共有几种方案。

  • 若相邻,捆绑插空,C61=6C_6^1=6 种.
  • 不相邻,上文已述,240240 种.

那么,显然这两个没有交集,我们直接加一起,总答案为 246246 种。

插板法

插板法是用于求一类给相同元素分组的方案数的一种技巧。

同时,也可以用于求一类线性不定方程的解(正整数解、非负整数解)的组数。

情况一:正整数解 \mathsf{\bold{情况一:正整数解}}

求:

x1+x2++xk=n x_1+x_2+\dots+x_k=n

的正整数解的解的组数。

情景:
nn 个小球分成 kk 个不同的组,每组个数不为零,求情况数。

考虑拿 k1k-1 块板子插入到 nn 个元素两两形成的 n1n-1 个空里面,因此答案就是,

(n1k1) \boxed{{n-1\choose k-1}}
情况二:非负整数解 \mathsf{\bold{情况二:非负整数解}}

求:

x1+x2++xk=n x_1+x_2+\dots+x_k=n

的非负整数解的解的组数。

情景:
nn 个小球分成 kk 个不同的组,每组个数可以为零,求情况数。

我们还是用 k1k-1 个板子来分成 kk 组,但是可以为零。

不妨令 yi=xi+1y_i=x_i+1,那么原方程,

y1+y2++yk=n+k y_1+y_2+\dots+y_k=n+k

注意到 yiy_i 就一定是正整数了,答案为,

(n+k1k1) \boxed{{n+k-1\choose k-1}}

情景就是我们借给他 kk 个元素,那么选完之后再删掉这几个,就行了。

情况三:不等式 \mathsf{\bold{情况三:不等式}}

求:

x1+x2++xkn x_1+x_2+\dots+x_k\le n

的非负整数解的解的组数。

注意到原式等价于,再加上一个非负整数,

x1+x2++xk+xk+1=n x_1+x_2+\dots+x_k+x_{k+1}=n

于是,答案为,

(n+kk) {n+k\choose k}
例题一:简单应用 \mathsf{\bold{例题一:简单应用}}

1010 球分给 44 人,甲必须有,方案数。

相当于,

x1+x2+x3+x4=10 x_1+x_2+x_3+x_4=10

其中 x11x_1\ge1,另 y1=x11y_1=x_1-1,则,

y1+x2+x3+x4=9 y_1+x_2+x_3+x_4=9

对于非负整数解个数,即,

(123)=12×11×103×2×1=220 {12\choose 3}={12\times11\times10\over3\times2\times1}=220
例题二:配合容斥原理 \mathsf{\bold{例题二:配合容斥原理}}

这一部分配合容斥是经典套路了。

题目,2424 个小球分给 33 个盒子,要求每个盒子至少一个且互不相同,求方案数。

容易发现,记,

a+b+c=24 a+b+c=24

答案即为,

#[]#[a=b]#[a=c]#[b=c]+2×#[a=b=c] \def\card#1{\#[#1]} \card{}-\card{a=b}-\card{a=c}-\card{b=c}+2\times\card{a=b=c}\\

注:为了简写,两两不等的省略。我们分别来看,

#[]=(232)=253 \#[]={23\choose 2}=253\\

考虑 #[xi=xj]\#[x_i=x_j] 是多少。

容易发现,即,

2t+x=24 2t+x=24

因为都是正整数,因此,

t(0,12) t\in(0,12)

共有 1111 种,因此,

#[a=b]=#[b=c]=#[a=c]=11 \def\card#1{\#[#1]} \card{a=b}=\card{b=c}=\card{a=c}=11\\

而,

#[a=b=c]=1 \#[a=b=c]=1

是显然的;因此,答案,

25333+2=222 253-33+2=222

先整体后局部策略

先把一个集合的位置确定,再确定集合内的。

如果是先确定集合内的,再确定集合整体位置,也可以视为插空法的一般形式。

例题:五个男生和五个女生拍照,要求同性相邻(不是同性恋)的方案数。

首先,我们先排男生和女生的次序 A(2,2)A(2,2)

然后男生内部和女生内部分别有 A(5,5)A(5,5) 的方案。

总答案为 A(2,2)×A(5,5)×A(5,5)A(2,2)\times A(5,5)\times A(5,5)

正难则反策略

经典的。

例题:班里 5050 人选 55 人出去玩,要求正副班长和团支部书记至少一人在内,方案数。

首先我们正着做肯定是枚举那个人在里面,然后随便选。

但是反着做也很简单,我们考虑没有限制的方案数,

(505) {50\choose 5}

但是有一些是不符合条件的,即三个人都不在,那么这个有多少种方案?

(475) {47\choose 5}

那么减掉,

(505)(475) {50\choose 5}-{47\choose 5}

就是总方案数。

成套思想

若展开式,

(3x1)8=a8x8+a7x7++a1x+a0 (3x-1)^8=a_8x^8+a_7x^7+\dots+a_1x+a_0

a8+a6+a4+a2+a0a_8+a_6+a_4+a_2+a_0

收到上面的启发,我们考虑设,

A=a8+a6+a4+a2+a0 A=a_8+a_6+a_4+a_2+a_0
B=a7+a5+a3+a1 B=a_7+a_5+a_3+a_1

我们考虑求出,

{A+B=AB= \begin{cases} A+B=\\ A-B= \end{cases}

就可以了。

下面是一些技巧。

我们知道系数 a0a8a_0\sim a_8 都是常数(与 xx 无关)且一定对所有有意义的 xx 成立。

那么这一位置我们可以随意带入 xx 以获得这些数的确切关系,比如,

带入 x=1x=1

28=a8+a7++a0 2^8=a_8+a_7+\dots+a_0

即,

A+B=256 A+B=256

带入 x=1x=-1

48=a8a7++a0 4^8=a_8-a_7+\dots+a_0

即,

AB=216=65536 A-B=2^{16}=65536

那么,易得,

{A=32896B=32640 \begin{cases} A&=32 896\\ B&=−32 640 \end{cases}

证明整除问题


例题一

(n+1)n1=(n1)n+(n2)n2++(nn)nn=n2+(n2)n2++(nn)nn \begin{aligned} (n+1)^n-1&={n\choose1}n+{n\choose2}n^2+\dots+{n\choose n}n^n\\ &=n^2+{n\choose2}n^2+\dots+{n\choose n}n^n \end{aligned}

可以被 n2n^2 整除。


例题二

我们尝试一些抽象的方法,

99101(1)1011510(mod100) 99^{10}-1\equiv(-1)^{10}-1\equiv1^5-1\equiv0\pmod{100}

好玩(


例题三

我们尝试一些可爱的方法,

5555+9755+1(1)55+10(mod8) 55^{55}+9\equiv7^{55}+1\equiv(-1)^{55}+1\equiv0\pmod8

好玩(

啊这跑题了(二项式定理哭哭)。

其实一个比较直观的理解方式,就是下面写成待遇出发,

a=qm+r,r[0,m) a=qm+r,r\in[0,m)

的形式,那么二项式定理,后面所有项都有模数的倍数,消去即得。


伯努利不等式

简单形式,对于实数 x1x\ge-1

  • n1n\ge1,则 (1+x)n1+nx(1+x)^n\ge1+nx
  • 0n10\le n\le1,则 (1+x)n1+nx(1+x)^n\le1+nx

可以看到等号成立当且仅当 n=0,1n = 0,1x=0x = 0 时。

二项式定理展开丢掉后面的项即可。

倍缩法和可重策略

例题:77 个人排队,甲乙丙顺序一定的情况下的方案数。

也可以鉴定为,甲乙丙顺序不重要的方案数。

我们可以用 77 个人排列的方案数,除去甲乙丙的方案数。

意义就是,排列完 A(7,7)A(7,7),每 A(3,3)A(3,3) 个就可以分为一组,

这一组内,除甲乙丙外顺序相同。

对于这若干个组,除去这个 A(3,3)A(3,3) 就是答案,

A(7,7)A(3,3)=A(7,4)=7×6×5×4=840 {A(7,7)\over A(3,3)}=A(7,4)=7\times6\times5\times4=840

可重集会具体讲。

多排问题直排策略

六个人照相排队,分两排,每排三人,共有几种排队方式。

Solution 1:先选三人,排列;剩下三人排列。

C(6,3)A(3,3)A(3,3)=6×5×43×2×1×3×2×1×3×2×1=6×5×4×3×2×1=720 \begin{aligned} C(6,3)A(3,3)A(3,3)\\ ={6\times5\times4\over3\times2\times1}\times3\times2\times1\times3\times2\times1\\ =6\times5\times4\times3\times2\times1=720 \end{aligned}

Solution 2:注意到等价于六个人排列,后三个自动补到后一排。

A(6,6)=6×5×4×3×2×1=720 A(6,6)=6\times5\times4\times3\times2\times1=720

总结:这种分组但是每组有区别的,可以合在一起考虑。

模型和穷举策略

模型,即将问题归纳为多个已有模型的组合。

穷举,即枚举,一般是结合先分组再分配、特殊优先处理。

模型一:排数问题

例题:用 090\sim9 可以排成多少个,


不同的三位数

Sol1:999100+1=900999-100+1=900
Sol2:9×10×10=9009\times10\times10=900,即第一位除了 00,后面随意。


没有重复数字的三位数

Sol:9×9×8=6489\times9\times8=648


没有重复数字的三位奇/偶数

奇数:最后一位 1,3,5,7,91,3,5,7,9
共有 5×8×8=3205\times8\times8=320 种数字.

偶数:最后一位 0,2,4,6,80,2,4,6,8
若是 00,有 9×8=729\times8=72 种数字.
否则 4×8×8=2564\times8\times8=256 种数字.
共有 72+256=32872+256=328 种数字.


加强:没有重复数字的 >300>300 的三位偶数

Sol:正难则反,用 328328 减去小于等于的。

第一位 115×8=405\times8=40
第一位 224×8=324\times8=32

答案:3284032=256328-40-32=256


模型二:球盒模型

注:因为作者懒得改下面不严谨的地方了,没有说明默认不考虑无解的情况(方案数为零)。

题型一:平均分配

九个小球分给三个人,求方案数。

  • 若人和球都不同。

第一个人选 33 个,第二个人从剩下的 66 中中选……

(93)(63)(33) {9\choose3}{6\choose3}{3\choose3}

也记为,

(93,3,3) {9\choose3,3,3}
  • 若人相同,球不同。

注意到相当于人球不同中,每 A(3,3)A(3,3) 个对应一个有效情况。

因此,答案为,

(93,3,3)/A(3,3) {9\choose3,3,3}\bigg/\begin{matrix}\\A(3,3)\end{matrix}
  • 若人和球都相同。

那么只有一种情况就是每人三个球呗。

  • 若人不同,球相同。

那么只有一种情况就是每人三个球呗(?

题型二:不完全平均分配

七球三人,一人 33 球,其他人 22 球,求方案数。

  • 若人和球都不同。

我们随便类比,答案为,

(73,2,2) {7\choose3,2,2}

注意到一定不存在重复。

  • 若人相同,球不同。

注意到只有大小相同的集合会重复。

具体的,若一个人选了集合 AA,另一个人选了 BB

那么,当且仅当 A=B|A|=|B| 时,交换 A,BA,B 才是等价的。

也就是说我们除去这个数字的大小的 A!|A|! 才是最终答案。

容易发现我们上一个模型中,除去的 A(3,3)A(3,3) 本质也是一样的。

也就是说上一个模型本质是这个模型的一个子集。

说了这么半天写一下公式把,

(73,2,2)/A(2,2) {7\choose3,2,2}\bigg/\begin{matrix}\\A(2,2)\end{matrix}
  • 其他:显然为 11 哦。

题型三:完全不平均分配

本质还是上面的子集,但是注意到 A(1,1)=1A(1,1)=1 罢了。

题型四:十二重计数法选讲

nn 个球,放到 mm 个盒子中,求方案数。


I. 球不同,盒子不同,无其他限制

每个球可以放到不同的 mm 个盒子中,因此答案为,

mn m^n

II. 球不同,盒子不同,每个盒子至多装一个球

显然若 n>mn>m 则无解。

否则,注意到相当于在 mm 个盒子中选择 nn 个来放球,

C(m,n)P(n,n)=P(m,n)=mn C(m,n)P(n,n)=P(m,n)=m^{\underline n}

先分组再分配策略,也可以理解按照顺序每个球可行位置递减。


III. 球不同,盒子不同,每个盒子至少装一个球

我们强令 ii 个盒子为空,其他盒子无限制。

那么我们容斥,

i=0m(1)i(mi)(mi)n \sum_{i=0}^m(-1)^i{m\choose i}(m-i)^n

就是答案。

具体的,减去有空的,但是重复了,因此容斥。


IV. 球不同,盒子相同,无其他限制

第二类斯特林数 · 行,本文不讲。


V. 球不同,盒子相同,每个盒子至多装一个球

注意到答案即为,

[nm] [n\le m]

用艾佛森括号表示。


VI. 球不同,盒子相同,每个盒子至少装一个球

第二类斯特林数板子题,本文不讲。


VII. 球相同,盒子不相同,无其他限制

插板法,

(n+m1m1) {n+m-1\choose m-1}

即为答案。


VIII. 球相同,盒子不相同,每个盒子至多装一个球

我们要选出来 nn 个盒子装球,其他的不装球,

(mn) {m\choose n}

即为答案。


IX. 球相同,盒子不相同,每个盒子至少装一个球

插板法,

(n1m1) {n-1\choose m-1}

即为答案。


X. 球相同,盒子相同,无其他限制

划分数问题,过于抽象,不讲。


XI. 球相同,盒子相同,每个盒子至多装一个球

和 V. 一样,答案为,

[nm] [n\le m]

用艾佛森括号表示。


XII. 球相同,盒子相同,每个盒子至少装一个球

同为划分数,不讲。

组合数大型运算推导

下面默认 nn 是任意自然数,一般 knk\le n


例题一,证明:

i=0k(1)i(ni)=(1)k(n1k) \sum_{i=0}^k(-1)^i{n\choose i}=(-1)^k{n-1\choose k}

对于 n<kn<k,且 n,kn,k 都是正整数。

很多题解使用了数学归纳法,这里用了一种比较好的方法:扰动法。

考虑证明,

i=0k(1)i(ni)+(1)k+1(nk+1)=1+i=0k(1)i+1(ni+1)=1i=0k(1)i(ni+1) \begin{aligned} \sum_{i=0}^k(-1)^i{n\choose i}+(-1)^{k+1}{n\choose k+1}&=1+\sum_{i=0}^k(-1)^{i+1}{n\choose i+1}\\ &=1-\sum_{i=0}^k(-1)^i{n\choose i+1} \end{aligned}

我们似乎没有思路了,但是注意到,

(ni)+(ni+1)=(n+1i+1) {n\choose i}+{n\choose i+1}={n+1\choose i+1}

于是,我们移项,

i=0k(1)i(n+1i+1)=1(1)k+1(nk+1)i=1k+1(1)i1(n+1i)=1(1)k+1(nk+1)i=1k+1(1)i(n+1i)=1+(1)k+1(nk+1)i=0k+1(1)i(n+1i)=(1)k+1(nk+1) \begin{aligned} \sum_{i=0}^k(-1)^i{n+1\choose i+1}&=1-(-1)^{k+1}{n\choose k+1}\\ \sum_{i=1}^{k+1}(-1)^{i-1}{n+1\choose i}&=1-(-1)^{k+1}{n\choose k+1}\\ \sum_{i=1}^{k+1}(-1)^i{n+1\choose i}&=-1+(-1)^{k+1}{n\choose k+1}\\ \sum_{i=0}^{k+1}(-1)^i{n+1\choose i}&=(-1)^{k+1}{n\choose k+1}\\ \end{aligned}

我们令 nn1,kk1n\gets n-1,k\gets k-1,得,

i=0k(1)i(ni)=(1)k(n1k) \begin{aligned} \sum_{i=0}^k(-1)^i{n\choose i}&=(-1)^k{n-1\choose k}\\ \end{aligned}

得证。


例题二,证明:

k=0n1k+1(nk)=1n+1(2n+11) \sum_{k=0}^n{1\over k+1}{n\choose k}={1\over n+1}(2^{n+1}-1)

我们考虑展开里面,

1k+1(nk)=n!(k+1)!(nk)!=1n+1(n+1k+1) {1\over k+1}{n\choose k}={n!\over(k+1)!(n-k)!}={1\over n+1}\cdot{n+1\choose k+1}

那么我们推导,

k=0n1k+1(nk)=1n+1k=0n(n+1k+1) \sum_{k=0}^n{1\over k+1}{n\choose k}={1\over n+1}\sum_{k=0}^n{n+1\choose k+1}

我们另 t=n+1t=n+1,右侧变为,

1tk=1t(tk)=1t(2t1) {1\over t}\sum_{k=1}^t{t\choose k}={1\over t}(2^t-1)

重新放回去,即得,

k=0n1k+1(nk)=1n+1(2n+11) \sum_{k=0}^n{1\over k+1}{n\choose k}={1\over n+1}(2^{n+1}-1)

例题三,证明:

k=0n(1)kk+1(nk)=1n+1 \sum_{k=0}^n{(-1)^k\over k+1}{n\choose k}={1\over n+1}

我们根据上一题的结论,

k=0n(1)kk+1(nk)=1n+1k=0n(1)k(n+1k+1) \sum_{k=0}^n{(-1)^k\over k+1}{n\choose k}={1\over n+1}\sum_{k=0}^n(-1)^k{n+1\choose k+1}

继续另 t=n+1t=n+1,右侧变为,

1tk=1t(1)k1(tk)=1t[k=0t(1)k1(tk)]+1t {1\over t}\sum_{k=1}^t(-1)^{k-1}{t\choose k}={1\over t}\left[\sum_{k=0}^t(-1)^{k-1}{t\choose k}\right]+{1\over t}

根据二项式定理,

(a+1)t=k=0tak(tk) (a+1)^t=\sum_{k=0}^ta^k{t\choose k}

带入 a=1a=-1,得,

k=0t(1)k(tk)=[t=0] \sum_{k=0}^t(-1)^k{t\choose k}=[t=0]

我们知道 t>n0t>n\ge0,即右侧一定为 00,即,

k=0n(1)kk+1(nk)=1n+1 \sum_{k=0}^n{(-1)^k\over k+1}{n\choose k}={1\over n+1}

Page Top