1. 盒子放小球问题
n个小球,m个盒子。
1.1 n个小球有区别,m个盒子有区别
(1)允许空盒:每个球放到任意盒子里,总方案数mn。
(2)不允许空盒:需满足n≥m≥1 ,m>n时无解。其方案数及时看成m个盒子相同时的方案数,再乘以m!。答案即是S(n,m)∗m!。S代表第二类斯特林数。
1.2 n个小球有区别,m个盒子无区别
(1)允许空盒:假设放了k个盒,m≥k≥1。那么答案就是∑k=1mS(n,k)。
(2)不允许有空盒:S(n,m)。
1.3 n个小球无区别,m个盒子有区别
(1)允许空盒:n≥m≥1。“隔板法”。假设不允许有空盒,每一个盒里都先放一个小球,这样小球共有n+m个,然后插板,插板的方案数为Cn+m−1n−1。
(2)不允许空盒:n≥m≥1。“隔板法”。方案数Cn−1m−1。
1.4 n个小球无区别,m个盒子无区别
(1)允许空盒:划分数问题。dp[i][j]表示i个球,j个盒子的方案数。转移方程为
dp[i][j]=dp[i−j][j]+dp[i][j−1](i≥j)
dp[i][j]=dp[i][j−1](i<j)
如果n<m,答案为dp[n][n],否则为dp[n][m]。
(2)不允许空盒:n≥m≥1。转成上情况的n−m个小球,m个盒子。
2. 计数原理与计数公式
2.1 可重复的排列与组合
2.1.1 可重复的排列
从n个不同元素中取m个元素(同一元素可以重复取出),按照一定的顺序排成一列。排列的个数为nm。
2.1.2 可重复的组合
从n个不同元素中取m个元素(同一元素可以重复取出),并成一组。组合的个数为Cn+m−1m。
【证明】
1,2,...,n表示n个不同元素。从中取m个可以表示成:
{i1,i2,...,im}(1≤i1≤i2≤...≤im≤n)
令jk=ik+(k−1),即:
j1j2j3...jm=i1=i2+1=i3+2=im+(m−1)
可以得到组合
{j1,j2,...,jm}(1≤j1<j2<...<jm≤n−m+1)
这样就相当于在n+m−1个元素中取m个不相同的元素,作为一组。
因此即是Cn+m−1m。
2.1.3 不全相异元素的全排列
n个元素中,分别有n1,n2,...,nk个元素相同,且n1+n2+...+nk=n,则称这n个元素的全排列为不全相异元素的全排列,个数为
n1!n2!...nk!n!
2.1.4 多组组合
n个相异的元素分为k(k≤n)个按照一定顺序排列的组,其中第i组有ni个元素(i=1,2,...,k)(n1+n2+...+nk=n)。不同的分组方法为
n1!n2!...nk!n!
【例】
从n(n≥6)个选手中选3对选手参加双打,问共有多少种选法。
答案为(注意不考虑组的顺序)
3!Cn6∗2!∗2!∗2!6!
2.2 相异元素的圆排列和项链数
2.2.1 圆排列
n个元素不分首尾排成一圈,成为n个相异元素的圆排列。排列的种数为(n−1)!。
2.2.2 项链数
将n粒不相同的珠子,穿成一副项链,得到的不同的项链数。
由于项链顺时针和逆时针都是相同的,所以个数即是圆排列的一半。
⎩⎨⎧1,n=1或n=221∗(n−1)!,n≥3
2.3 错排问题
错排递推式。
D(n)代表n个数的错排公式,则
D(n)=(n−1)∗[D(n−1)+D(n−2)]
错排公式
D(n)=n!(1−1!1+2!1−3!1+...+n!(−1)n)
2.4 组合数常用公式
Cn2=2n∗(n−1)Cn3=6n∗(n−1)(n−2)Cnm=Cn−1m−1+Cn−1mm∗Cnm=n∗Cn−1m−1Cn0+Cn1+...+Cnn=2n1Cn1+2Cn2+...+nCnn=n2n−112Cn1+22Cn2+...+n2Cnn=n(n+1)2n−21Cn1−2Cn2+3Cn3+...+(−1)n−1nCnn=1+21+31+...+n1(Cn0)2+(Cn1)2+(Cn2)2+...+(Cnn)2=C2nn
范德蒙恒等式:
i=0∑kCniCmk−i=Cn+mk
经验式(link https://www.cnblogs.com/qrsikno/p/10170523.html):
i=0∑nCni∗ri=(r+1)n(广义二项式定理)i=0∑ni∗Cni=n∗2n−1i=0∑nCik=Cn+1k+1i=0∑kCn+ii=Cn+k+1k
3. 抽屉原理与平均值原理
3.1 抽屉原理
3.1.1 第一抽屉原理
如果将m个物件放入n个抽屉内,那么必有一个抽屉内至少有[nm−1]+1个物件。
【推广】
如果将m1+m2+...+mn+1个物件放入n个抽屉内,那么或者第一个抽屉内至少有m1+1个物件,或者第二个抽屉内至少有m2+1个物件……或者第n个抽屉内至少有mn+1个物件。
3.1.2 第二抽屉原理
如果将m个物件放入n个抽屉内,那么必有一个抽屉内至多有[nm]个物件。
【推广】
如果将m1+m2+...+mn−1个物件放入n个抽屉内,那么或者第一个抽屉内至多有m1−1个物件,或者第二个抽屉内至多有m2−1个物件……或者第n个抽屉内至多有mn−1个物件。
3.2 平均值原理
(1)设a1,a2,...,an是实数,A=n1(a1+a2+...+an),则a1,a2,...,an中必有一个数不小于A,也有一个数不大于A。
(2)设a1,a2,...,an是实数,G=n1na1a2...an,则a1,a2,...,an中必有一个数不小于G,也有一个数不大于G。
4. 生成函数
生成函数的定义:
实数序列 a0,a1,...,ak,...的生成函数是无穷级数
G(x)=a0+a2x+...+akxk+...=k=0∑∞akxk
ak的普通生成函数。
广义二项式系数:
(ku)={u(u−1)(u−2)...(u−k+1)/k!,1,k>0k=0
【例】
(31/2)=3!(1/2)(1/2−1)(1/2−2)=6(1/2)(−1/2)(−3/2)=1/16
设x是实数,∣x∣<1,u是实数,那么
(1+x)u=k=0∑∞(ku)xk
4.1 常用生成函数
1−x1−xn+1=k=0∑nxk1−ax1=k=0∑∞akxk(1−x)21=k=0∑∞(k+1)xk(1−x)n1=k=0∑∞Cn+k−1kxk(1+x)n1=k=0∑∞Cn+k−1k(−1)kxk
4.2 计数问题
5. 特殊计数序列
5.1 Catalan数列
前几项:1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,......即c[0]=1,c[1]=1,c[2]=2...
递推式1:f[n]=i=0∑n−1f[i]∗f[n−i−1]递推式2:f[n]=n+14n−2f[n−1]组合式1:f[n]=n+1C2nn组合式2:f[n]=C2nn−C2nn−1
应用:
- 二叉树计数1:已知二叉树有n个节点,能够构成Cn种不同的二叉树。(二叉搜索树)
- 二叉树计数2:已知二叉树的叶子n个,能够构成Cn−1种不同的二叉树。(二叉搜索树)
- 括号匹配数:一个合法的表达式由()包围,()可以嵌套和连接,给出n对括号,可以组成的合法表达式的个数为Cn。
- 划分问题:将一个凸n+2多边形区域分成三角形区域的方法数为Cn。
- 出栈问题1:一个栈的进栈序列为1,2,3,..n,不同的出栈序列有Cn种。
- 出栈问题2:有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少种方法使得只要有10元的人买票,售票处就有5元的钞票找零。5元的相当于入栈,10元的相当于出栈,转化成上问题。
- 路径问题:在n∗n的方格地图中,从一个角到另外一个角,不跨越对角线的路径数有Cn种。
- 握手问题:2n个人均匀坐在一个圆桌边上,某个时刻所有人同时与另一个人握手,要求手之间不能交叉,共有Cn种握手方法。
5.2 Fibonacci数列
通项公式:Fn=51[(21+5)n−(21−5)n]
递推式:
Fn=Fn−1+Fn−2
性质:
F1+F1+F2+F3+...+Fn=Fn+2−1F1+2F2+3F3+...+nFn=nFn+2−Fn+3+2F1+F3+F5+...+F2n−1=F2nF2+F4+F6+...+F2n=F2n+1−1F12+F22+F32+...+Fn2=FnFn+1Fn−1Fn+1−Fn2=(−1)n
定理:
FnFm+Fm−1Fn−1=Fm+n−1FmFn+1+Fm−1Fn=Fm+nm=n时,F2n−1=Fn2+Fn−12F2n=(Fn−1+Fn+1)Fn=(2Fn−1+Fn)FnFn整除Fm当且仅当n整除m,其中n≥3任意连续三个Fibonacci数两两互素。
5.3 Lucas数列
定义:
Ln=⎩⎪⎨⎪⎧2,1,Ln−1+Ln−2,n=1n=2n≥3
通项公式:
Ln=(21+5)n+(21−5)n
与Fibonacci数的关系:
F2n=LnFnLn=Fn−1+Fn+1Fn=5Ln−1+Ln+1Ln2=5Fn2+4(−1)n
5.4 Stirling数
5.4.1 第一类Stirling数
S1(n,m)表示的是将n个不同元素构成m个圆排列的数目。
递推式:
S1(n,m)=(n−1)∗S1(n−1,m)+S1(n−1,m−1)(n>1,m>1)
边界条件:
S1(0,0)=1,S1(n,0)=0S1(n,n)=1
性质:
k=0∑nS1(n,k)=n!
【例】n个仓库, 2n把钥匙,n 位官员。如果把n位官员分成m个不同的部,部中的官员数量与管理的仓库数量一致。有多少种方案使得所有同部的官员可以打开所有本部管理的仓库,而无法打开其他管理的仓库。(n把钥匙放到仓库,n把钥匙分给官员)
方案数即为S1(n,m)n!。
前面的是放到仓库里的方案数,后面说官员的分配方案。
5.4.2 第二类Stirling数
S2(n,m)表示的是把n个不同元素划分到m个集合的方案数。
递推式:
S2(n,m)=m∗S2(n−1,m)+S2(n−1,m−1)(1≤m≤n−1)
边界条件:
S2(n,0)=0,S2(n,1)=1S2(n,n)=1
5.5 Bernoulli数
6. Polya计数