一、加法原理和乘法原理

1、定义:

①加法原理:

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

口诀:类类独立

②乘法原理:

做一件事,完成它需要分成N个步骤,做第一步有M1种不同的方法,做第二步有M2种不同的方法,……,做第n步有Mn种不同的方法。那么完成这件事共有 N=M1×M2×M3××Mn 种不同的方法。

口诀:步步相关

2、例:

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

问:

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

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

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

3、模运算

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

模运算符合以下规律

(1)(ab)%p=(a%pb%p)%p

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

(3)(ab)%p=(a%pb%p)%p

(4)(ab)%p=((a%p)b)%p

二、排列与组合

1、排列数

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

排列数用 Amn 表示“从 n 个元素里面取 m 个元素,排成一排的方案数”,也就是Amn = n!(nm)!

2、组合数

(1) 定义:

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

(2) 公式:

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

Cmn = Cm1n1 + Cm1n

Cn0=1 ; Cnn=1 ; C00=1
组合数的通项公式

Cmn = AmnAmm = n(n1)(nm+1)m(m1)21 = n!m!(nm)!
互补性质

Cmn=Cnmn

(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] ; //递推
}

文章转载于本人原博客

What do you think?
  • 0
  • 0
  • 0
  • 0
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8

I am ordinary yet unique.