组合数学是数学的一个重要分支,在ACM竞赛中占有极大的比重
常用公式
C n m = n ! m ! × ( n − m ) ! C_n^m=\dfrac{n!}{m!\times(n-m)!} Cnm=m!×(n−m)!n! , A n m = n ! ( n − m ) ! A_n^m=\dfrac{n!}{(n-m)!} Anm=(n−m)!n!
C n m = C n − 1 m + C n − 1 m − 1 C_n^m=C_{n-1}^m+C_{n-1}^{m-1} Cnm=Cn−1m+Cn−1m−1
C m m + C m + 1 m + . . . + C m + n m = C m + n + 1 m + 1 C_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
C n 0 + C n + 1 1 + . . . + C n + k k = C n + k + 1 k C_n^0+C_{n+1}^1+...+C_{n+k}^k=C_{n+k+1}^{k} Cn0+Cn+11+...+Cn+kk=Cn+k+1k
C 2 n 2 = 2 C n 2 + n 2 C_{2n}^2=2C_n^2+n^2 C2n2=2Cn2+n2
常见情况
-
n n n球 m m m盒子: A n + m − 1 n + m − 1 A_{n+m-1}^{n+m-1} An+m−1n+m−1
球相同:除以 A n n A_n^n Ann
盒子相同:除以 A m − 1 m − 1 A_{m-1}^{m-1} Am−1m−1 -
n n n个人站一排: A n n A_{n}^n Ann
n n n个人站一圈: A n n / n = A n − 1 n − 1 A_{n}^n/n=A_{n-1}^{n-1} Ann/n=An−1n−1 -
n n n男 m m m女站一排(相当于 n + m n+m n+m位置选 n n n个): C n + m n C_{n+m}^{n} Cn+mn
n n n男 m m m女站一圈: P o l y a Polya Polya计数 -
男生不能站在一起,插空法
男生必须站在一起,捆绑法 -
k k k个元素的无限集取r个的全排列: K r K^r Kr
k k k个元素的无限集取r个的组合数: C k + r − 1 r C_{k+r-1}^r Ck+r−1r
k k k个元素的无限集取r个且每个元素至少有一个的组合数: C r − 1 k − 1 C_{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):(只能往上或往右)的方案数 C n + m n C_{n+m}^n Cn+mn
-
n n n个点一圈 m m m种颜色,两个相邻点颜色不同: ( − 1 ) n ∗ ( m − 1 ) + ( m − 1 ) n (-1)^n*(m-1)+(m-1)^n (−1)n∗(m−1)+(m−1)n
-
n n n朵花一排, 有 m m m种颜色, 涂色不能有相邻花同种颜色, 问恰好使用k种颜色的方案数
A x = C k x ∗ x ∗ ( x − 1 ) n − 1 A_x=C_k^x*x*(x-1)^{n-1} Ax=Ckx∗x∗(x−1)n−1
a n s = C m k ∗ ( A k − A k − 1 + A k − 2 . . . + ( − 1 ) k A 0 ) ans=C_m^k*(A_k-A_{k-1}+A_{k-2}...+(-1)^kA_0) ans=Cmk∗(Ak−Ak−1+Ak−2...+(−1)kA0) -
任意个人,每个人有 1 2 \frac{1}{2} 21的概率来或不来,来偶数个人的概率为 1 2 \frac{1}{2} 21,奇数 1 2 \frac{1}{2} 21
斐波那契数列
-
满足递推方程 F i = F i − 1 + F i − 2 , i ≥ 3 ; F 1 = F 2 = 1 F_{i} = F_{i - 1} + F_{i - 2},i \geq 3;F_{1} = F_{2} = 1 Fi=Fi−1+Fi−2,i≥3;F1=F2=1,的数列 { F n } \left\{ F_{n} \right\} {Fn}称为斐波那契数列, F n F_{n} Fn为斐波那契数。
-
斐波那契数列的通项公式为 F n = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) 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\rbrack Fn=51[(21+5)n−(21−5)n]
-
F n ≡ 276601605 ( 69150401 3 n − 30849599 7 n ) ( m o d ( 1 0 9 + 9 ) ) F_n≡276601605(691504013^n-308495997^n)(mod\ (10^9+9)) Fn≡276601605(691504013n−308495997n)(mod (109+9))
Catalan数
-
Catalan数满足递推方程 C n = ∑ k = 0 n − 1 C k C n − k − 1 , n ≥ 2 ; C 0 = C 1 = 1 C_{n} = \sum_{k = 0}^{n - 1}{C_{k}C_{n - k-1}},n \geq 2;C_{0} = C_{1} = 1 Cn=∑k=0n−1CkCn−k−1,n≥2;C0=C1=1
-
前几个Catalan数为1,1,2,5,14,42,132,429,1430,4862
-
Catalan数的通项公式为 C n = C 2 n n n + 1 = C 2 n n − C 2 n n − 1 C_{n} = \frac{C_{2n}^{n}}{n + 1} = C_{2n}^{n} - C_{2n}^{n - 1} Cn=n+1C2nn=C2nn−C2nn−1
-
Catalan数的另一个递推公式为 C n = 4 n − 2 n + 1 C n − 1 C_{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 , x 2 , x 3 , ⋅ ⋅ ⋅ , x n x,x^{2},x^{3}, \cdot \cdot \cdot ,x^{n} x,x2,x3,⋅⋅⋅,xn的系数称为第一类Stirling数,记为 S 1 ( n , k ) , k = 0 , 2 , ⋅ ⋅ ⋅ , n S_{1}\left( n,k \right),k = 0,2, \cdot \cdot \cdot ,n S1(n,k),k=0,2,⋅⋅⋅,n
-
第一类Stirling数满足 S 1 ( n , n ) = 1 ; S 1 ( n , 0 ) = 0 ; S 1 ( n , n − k ) = ( − 1 ) n M k n , k = 1 , 2 , ⋅ ⋅ ⋅ , n − 1 S_{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 - 1 S1(n,n)=1;S1(n,0)=0;S1(n,n−k)=(−1)nMkn,k=1,2,⋅⋅⋅,n−1
式中 M k n M_{k}^{n} Mkn表示 { 1 , 2 , ⋅ ⋅ ⋅ , n − 1 } \left\{ 1,2, \cdot \cdot \cdot ,n - 1 \right\} {1,2,⋅⋅⋅,n−1}中任意k个不同的自然数乘积之和。
- 第一类Stirling数满足递归关系 { S 1 ( n + 1 , k ) = S 1 ( n , k − 1 ) − n S 1 ( n , k ) , n ≥ 0 , k > 0 S 1 ( n , n ) = 1 , S 1 ( 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), x n = ∑ k = 0 n S 2 ( n , k ) [ x ] k x^{n} = \sum_{k = 0}^{n}{S_{2}\left( n,k \right)\left\lbrack x \right\rbrack_{k}} xn=∑k=0nS2(n,k)[x]k,称 S 2 ( n , k ) S_{2}\left( n,k \right) S2(n,k)为第二类Stirling数。
-
第二类Stirling数满足 S 2 ( n , k ) = 1 k ! ∑ i = 0 k − 1 ( − 1 ) i C k i ( k − i ) n S_{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数满足递归关系 { S 2 ( n + 1 , k ) = S 2 ( n , k − 1 ) + k S 2 ( n , k ) , n ≥ 0 , k ≥ 1 S 2 ( 0 , 0 ) = 1 , S 2 ( 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)得 S 2 ( n , k ) = ∑ i = 0 k − 1 ( − 1 ) i i ! ( 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 ,对 a i = ( − 1 ) i i ! a_i=\frac{(-1)^i}{i!} ai=i!(−1)i 与 b i = i n i ! b_i=\frac{i^n}{i!} bi=i!in 卷积即可
-
k n = ∑ i = 1 k ( i k ) 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的分拆数,记为 P r ( n ) P_{r}\left( n \right) Pr(n)
-
P 1 ( n ) P_{1}\left( n \right) P1(n)=1; P n ( n ) P_{n}\left( n \right) Pn(n)=1; P n − 1 ( n ) P_{n - 1}\left( n \right) Pn−1(n)=1; P n − 2 ( n ) P_{n - 2}\left( n \right) Pn−2(n)=2; P n − 3 ( n ) P_{n - 3}\left( n \right) Pn−3(n)=3
-
P 2 ( n ) = ⌈ n − 1 2 ⌉ , n ≥ 2 P_{2}\left( n \right) = \left\lceil \frac{n - 1}{2} \right\rceil,n \geq 2 P2(n)=⌈2n−1⌉,n≥2
-
P r ( n ) = P 1 ( n − r ) + P 2 ( n − r ) + ⋅ ⋅ ⋅ + P r ( 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)
分装问题
将 n n n个球放入 r r r个盒子称为分装问题
-
相同球和相同盒子, n ≥ r n≥r n≥r
- 没有空盒子: P r ( n − r ) P_{r}\left( n - r \right) Pr(n−r)
- 可以有空盒子: ∑ k = 1 r P k ( n ) \sum_{k = 1}^{r}{P_{k}\left( n \right)} ∑k=1rPk(n)
-
相同球和不同盒子
- 没有空盒子: C n − 1 r − 1 C_{n - 1}^{r - 1} Cn−1r−1
- 可以有空盒子: C n + r − 1 n C_{n + r - 1}^{n} Cn+r−1n
-
不同球和相同盒子
- 没有空盒子: S 2 ( n , r ) S_{2}\left( n,r \right) S2(n,r)
- 可以有空盒子: ∑ k = 1 r S 2 ( n , k ) \sum_{k = 1}^{r}{S_{2}\left( n,k \right)} ∑k=1rS2(n,k)
-
不同球和不同盒子
- 没有空盒子: r ! S 2 ( n , r ) r!S_{2}\left( n,r \right) r!S2(n,r)
- 可以有空盒子: r n r^{n} rn