一、加法原理和乘法原理

1、定义:

①加法原理:

加法原理是分类计数原理,常用于排列组合中,具体是指:做一件事情,完成它有N类方式,第一类方式有$M_1$种方法,第二类方式有$M_2$种方法,……,第n类方式有Mn种方法,那么完成这件事情共有$M_1+M_2+……+M_n$种方法。

口诀:类类独立

②乘法原理:

做一件事,完成它需要分成N个步骤,做第一步有$M_1$种不同的方法,做第二步有$M_2$种不同的方法,……,做第n步有$M_n$种不同的方法。那么完成这件事共有 $N=M_1×M_2×M_3×…×M_n$ 种不同的方法。

口诀:步步相关

2、例:

(1)某中学八年级一班有12名男生,16名女生;二班有9名男生,17名女生。

问:

从这两个班的同学中,选择 1 名男生、1 名女生作为主持人。有几种选法?

利用乘法原理,总方案数等于 总男生数 * 总女生数

$ (12+9)* (16+17)= 693 $

3、模运算

在得数较大时,要每进行一步计算就取余。

模运算符合以下规律

(1)$$ (a-b)\%p=(a\%p-b\%p)\%p$$

(2)$$ (a + b)\%p=(a\%p+b\% p)\%p$$

(3)$$(a*b)\%p=(a\%p*b\%p)\%p$$

(4)$$(a^b)\%p=((a\%p)^b)\%p$$

二、排列与组合

1、排列数

定义:从 n 个人里面选出 m 个人站成一排,方案数是: n ⋅ (n − 1) ⋯ (n − m + 1) = $ \frac{ n ! }{ (n-m)! } $。我们将它称为排列数。

排列数用 $A^m_n$ 表示“从 n 个元素里面取 m 个元素,排成一排的方案数”,也就是$ A^m_n $ = $ \frac{ n ! }{ (n-m)! } $。

2、组合数

(1) 定义:

用 $C^m_n$ 表示“从 n 个元素里面选出 m 个元素”的方案数,我们将它称为组合数。

(2) 公式:

组合数的递推公式,称为帕斯卡公式。

$C^m_n$ = $C^{m-1}_{n-1}$ + $C^{m-1}_n$

$C^n_0$=1 ; $C^n_n$=1 ; $C^0_0$=1
组合数的通项公式

$C^m_n$ = $\frac{A_n^m}{A_m^m}$ = $\frac{n\cdot(n-1)\cdot\cdot\cdot(n-m+1)}{m(m-1)\cdot\cdot\cdot2\cdot1}$ = $\frac{n!}{m!\cdot(n-m)!}$
互补性质

$C_n^m=C^{n-m}_n$

(3) 代码实现

①通项公式

long long fac(int n) 
{ 
    long long f=1;
    for(int i=n;i>0;i--)
    f *= i;
    return f;
}//求阶乘
long long C(int n, int m) 
{
    return fac(n)/(fac(n - m)*fac(m));
}

②递归公式

for (int i=0;i<=21;i++) 
{
    C[i][0] = C[i][i] = 1;
    for (int j=1;j<i;j++) 
        C[i][j]=C[i-1][j]+C[i-1][j-1] ; //递推
}

文章转载于本人原博客


I am ordinary yet unique.