组合数学是数学的一个重要分支,在ACM竞赛中占有极大的比重
常用公式
Cnm=n!m!×(n−m)!C_n^m=\dfrac{n!}{m!\times(n-m)!}Cnm=m!×(n−m)!n! , Anm=n!(n−m)!A_n^m=\dfrac{n!}{(n-m)!}Anm=(n−m)!n!
Cnm=Cn−1m+Cn−1m−1C_n^m=C_{n-1}^m+C_{n-1}^{m-1}Cnm=Cn−1m+Cn−1m−1
Cmm+Cm+1m+...+Cm+nm=Cm+n+1m+1C_m^m+C_{m+1}^m+...+C_{m+n}^m=C_{m+n+1}^{m+1}Cmm+Cm+1m+...+Cm+nm=Cm+n+1m+1
Cn0+Cn+11+...+Cn+kk=Cn+k+1kC_n^0+C_{n+1}^1+...+C_{n+k}^k=C_{n+k+1}^{k}Cn0+Cn+11+...+Cn+kk=Cn+k+1k
C2n2=2Cn2+n2C_{2n}^2=2C_n^2+n^2C2n2=2Cn2+n2
常见情况
-
nnn球mmm盒子:An+m−1n+m−1A_{n+m-1}^{n+m-1}An+m−1n+m−1
球相同:除以AnnA_n^nAnn
盒子相同:除以Am−1m−1A_{m-1}^{m-1}Am−1m−1 -
nnn个人站一排:AnnA_{n}^nAnn
nnn个人站一圈:Ann/n=An−1n−1A_{n}^n/n=A_{n-1}^{n-1}Ann/n=An−1n−1 -
nnn男mmm女站一排(相当于n+mn+mn+m位置选nnn个):Cn+mnC_{n+m}^{n}Cn+mn
nnn男mmm女站一圈:PolyaPolyaPolya计数 -
男生不能站在一起,插空法
男生必须站在一起,捆绑法 -
kkk个元素的无限集取r个的全排列:KrK^rKr
kkk个元素的无限集取r个的组合数:Ck+r−1rC_{k+r-1}^rCk+r−1r
kkk个元素的无限集取r个且每个元素至少有一个的组合数:Cr−1k−1C_{r-1}^{k-1}Cr−1k−1 -
错排公式:[n!/e+0.5][n!/e+0.5][n!/e+0.5]
-
(0,0)(0,0)(0,0)走到(n,m)(n,m)(n,m):(只能往上或往右)的方案数Cn+mnC_{n+m}^nCn+mn
-
nnn个点一圈mmm种颜色,两个相邻点颜色不同:(−1)n∗(m−1)+(m−1)n(-1)^n*(m-1)+(m-1)^n(−1)n∗(m−1)+(m−1)n
-
nnn朵花一排, 有mmm种颜色, 涂色不能有相邻花同种颜色, 问恰好使用k种颜色的方案数
Ax=Ckx∗x∗(x−1)n−1A_x=C_k^x*x*(x-1)^{n-1}Ax=Ckx∗x∗(x−1)n−1
ans=Cmk∗(Ak−Ak−1+Ak−2...+(−1)kA0)ans=C_m^k*(A_k-A_{k-1}+A_{k-2}...+(-1)^kA_0)ans=Cmk∗(Ak−Ak−1+Ak−2...+(−1)kA0) -
任意个人,每个人有12\frac{1}{2}21的概率来或不来,来偶数个人的概率为12\frac{1}{2}21,奇数12\frac{1}{2}21
斐波那契数列
-
满足递推方程Fi=Fi−1+Fi−2,i≥3;F1=F2=1F_{i} = F_{i - 1} + F_{i - 2},i \geq 3;F_{1} = F_{2} = 1Fi=Fi−1+Fi−2,i≥3;F1=F2=1,的数列{Fn}\left\{ F_{n} \right\}{Fn}称为斐波那契数列,FnF_{n}Fn为斐波那契数。
-
斐波那契数列的通项公式为Fn=15[(1+52)n−(1−52)n]F_{n} = \frac{1}{\sqrt{5}}\left\lbrack \left( \frac{1 + \sqrt{5}}{2} \right)^{n} - \left( \frac{1 - \sqrt{5}}{2} \right)^{n} \right\rbrackFn=51[(21+5)n−(21−5)n]
-
Fn≡276601605(691504013n−308495997n)(mod (109+9))F_n≡276601605(691504013^n-308495997^n)(mod\ (10^9+9))Fn≡276601605(691504013n−308495997n)(mod (109+9))
-
Catalan数
-
Catalan数满足递推方程Cn=∑k=0n−1CkCn−k−1,n≥2;C0=C1=1C_{n} = \sum_{k = 0}^{n - 1}{C_{k}C_{n - k-1}},n \geq 2;C_{0} = C_{1} = 1Cn=∑k=0n−1CkCn−k−1,n≥2;C0=C1=1
-
前几个Catalan数为1,1,2,5,14,42,132,429,1430,4862
-
Catalan数的通项公式为Cn=C2nnn+1=C2nn−C2nn−1C_{n} = \frac{C_{2n}^{n}}{n + 1} = C_{2n}^{n} - C_{2n}^{n - 1}Cn=n+1C2nn=C2nn−C2nn−1
-
Catalan数的另一个递推公式为Cn=4n−2n+1Cn−1C_{n} = \frac{4n - 2}{n + 1}C_{n - 1}Cn=n+14n−2Cn−1
第一类Stirling数
-
多项式[x]n=x(x−1)(x−2)⋅⋅⋅(x−n+1)\left\lbrack x \right\rbrack_{n} = x\left( x - 1 \right)\left( x - 2 \right) \cdot \cdot \cdot \left( x - n + 1 \right)[x]n=x(x−1)(x−2)⋅⋅⋅(x−n+1)中常数项和x,x2,x3,⋅⋅⋅,xnx,x^{2},x^{3}, \cdot \cdot \cdot ,x^{n}x,x2,x3,⋅⋅⋅,xn的系数称为第一类Stirling数,记为S1(n,k),k=0,2,⋅⋅⋅,nS_{1}\left( n,k \right),k = 0,2, \cdot \cdot \cdot ,nS1(n,k),k=0,2,⋅⋅⋅,n
-
第一类Stirling数满足S1(n,n)=1;S1(n,0)=0;S1(n,n−k)=(−1)nMkn,k=1,2,⋅⋅⋅,n−1S_{1}\left( n,n \right) = 1;S_{1}\left( n,0 \right) = 0;S_{1}\left( n,n - k \right) = \left( - 1 \right)^{n}M_{k}^{n},k = 1,2, \cdot \cdot \cdot ,n - 1S1(n,n)=1;S1(n,0)=0;S1(n,n−k)=(−1)nMkn,k=1,2,⋅⋅⋅,n−1
式中MknM_{k}^{n}Mkn表示{1,2,⋅⋅⋅,n−1}\left\{ 1,2, \cdot \cdot \cdot ,n - 1 \right\}{1,2,⋅⋅⋅,n−1}中任意k个不同的自然数乘积之和。
- 第一类Stirling数满足递归关系{S1(n+1,k)=S1(n,k−1)−nS1(n,k),n≥0,k>0S1(n,n)=1,S1(n,0)=0\left\{ \begin{matrix} S_{1}\left( n + 1,k \right) = S_{1}\left( n,k - 1 \right) - nS_{1}\left( n,k \right),n \geq 0,k > 0 \\ S_{1}\left( n,n \right) = 1,S_{1}\left( n,0 \right) = 0 \\ \end{matrix} \right.{S1(n+1,k)=S1(n,k−1)−nS1(n,k),n≥0,k>0S1(n,n)=1,S1(n,0)=0
第二类Stirling数
-
多项式[x]n=x(x−1)(x−2)⋅⋅⋅(x−n+1)\left\lbrack x \right\rbrack_{n} = x\left( x - 1 \right)\left( x - 2 \right) \cdot \cdot \cdot \left( x - n + 1 \right)[x]n=x(x−1)(x−2)⋅⋅⋅(x−n+1),xn=∑k=0nS2(n,k)[x]kx^{n} = \sum_{k = 0}^{n}{S_{2}\left( n,k \right)\left\lbrack x \right\rbrack_{k}}xn=∑k=0nS2(n,k)[x]k,称S2(n,k)S_{2}\left( n,k \right)S2(n,k)为第二类Stirling数。
-
第二类Stirling数满足S2(n,k)=1k!∑i=0k−1(−1)iCki(k−i)nS_{2}\left( n,k \right) = \frac{1}{k!}\sum_{i = 0}^{k - 1}{\left( - 1 \right)^{i}C_{k}^{i}\left( k - i \right)^{n}}S2(n,k)=k!1∑i=0k−1(−1)iCki(k−i)n
-
第二类Stirling数满足递归关系{S2(n+1,k)=S2(n,k−1)+kS2(n,k),n≥0,k≥1S2(0,0)=1,S2(n,0)=0\left\{ \begin{matrix} S_{2}\left( n+1,k \right) = S_{2}\left( n,k - 1 \right) + kS_{2}\left( n,k \right),n \geq 0,k \geq 1 \\ S_{2}\left( 0,0 \right) = 1,S_{2}\left( n,0 \right) = 0 \\ \end{matrix} \right.{S2(n+1,k)=S2(n,k−1)+kS2(n,k),n≥0,k≥1S2(0,0)=1,S2(n,0)=0
-
第二类Stirling数可以用卷积的方法求,根据(2)得 S2(n,k)=∑i=0k−1(−1)ii!(k−i)n(k−i)!S_2(n,k)=\sum_{i=0}^{k-1}\frac{(-1)^i}{i!}\frac{(k-i)^n}{(k-i)!}S2(n,k)=∑i=0k−1i!(−1)i(k−i)!(k−i)n ,对 ai=(−1)ii!a_i=\frac{(-1)^i}{i!}ai=i!(−1)i 与 bi=ini!b_i=\frac{i^n}{i!}bi=i!in 卷积即可
-
kn=∑i=1k(ik)S(n,i)i!k^n=∑_{i=1}^k(^k_i)S(n,i)i!kn=∑i=1k(ik)S(n,i)i!
分拆数
-
称正整数n分解为r个正整数和的个数为n分解成r的分拆数,记为Pr(n)P_{r}\left( n \right)Pr(n)
-
P1(n)P_{1}\left( n \right)P1(n)=1;Pn(n)P_{n}\left( n \right)Pn(n)=1;Pn−1(n)P_{n - 1}\left( n \right)Pn−1(n)=1;Pn−2(n)P_{n - 2}\left( n \right)Pn−2(n)=2;Pn−3(n)P_{n - 3}\left( n \right)Pn−3(n)=3
-
P2(n)=⌈n−12⌉,n≥2P_{2}\left( n \right) = \left\lceil \frac{n - 1}{2} \right\rceil,n \geq 2P2(n)=⌈2n−1⌉,n≥2
-
Pr(n)=P1(n−r)+P2(n−r)+⋅⋅⋅+Pr(n−r)P_{r}\left( n \right) = P_{1}\left( n - r \right) + P_{2}\left( n - r \right) + \cdot \cdot \cdot + P_{r}\left( n - r \right)Pr(n)=P1(n−r)+P2(n−r)+⋅⋅⋅+Pr(n−r)
分装问题
将nnn个球放入rrr个盒子称为分装问题
-
相同球和相同盒子,n≥rn≥rn≥r
- 没有空盒子:Pr(n−r)P_{r}\left( n - r \right)Pr(n−r)
- 可以有空盒子:∑k=1rPk(n)\sum_{k = 1}^{r}{P_{k}\left( n \right)}∑k=1rPk(n)
-
相同球和不同盒子
- 没有空盒子:Cn−1r−1C_{n - 1}^{r - 1}Cn−1r−1
- 可以有空盒子:Cn+r−1nC_{n + r - 1}^{n}Cn+r−1n
-
不同球和相同盒子
- 没有空盒子:S2(n,r)S_{2}\left( n,r \right)S2(n,r)
- 可以有空盒子:∑k=1rS2(n,k)\sum_{k = 1}^{r}{S_{2}\left( n,k \right)}∑k=1rS2(n,k)
-
不同球和不同盒子
- 没有空盒子:r!S2(n,r)r!S_{2}\left( n,r \right)r!S2(n,r)
- 可以有空盒子:rnr^{n}rn