加法原理

完成一件事情,有N类方式去实现,第一类方式有 a 1 a_1 a1​种,第二类方法有 a 2 a_2 a2​种,…,第N类方法有 a n a_n an​种,则完成这件事情的总方法数为:
∑ i = 1 N a i \sum_{i=1}^N a_i i=1∑N​ai​
例如:从北京到上海有火车、飞机、轮船 3 种方式,火车、飞机、轮船分别有 a1,a2,a3 个班次,那么从北京到上海有 a1+a2+a3 种方式可以到达。

乘法原理

做一件事,完成它要分成 n 个步骤,第一步有 a 1 a_1 a1​ 种不同的方法,第二步有 a 2 a_2 a2​ 种不同的方法,…,第 n 步有 a n a_n an​ 种不同的方法,那么完成这件事共有 a 1 × a 2 × a 3 × … × a n a_1 ×a_2×a_3×…×a_n a1​×a2​×a3​×…×an​ 种不同的方法

例如:从北京乘坐火车到上海,需要转 3 次车,每次专车分别有 a1,a2,a3 个班次,那么从北京到上海有 a1×a2×a3 种方式可以到达。

排列组合

在排列与组合问题中,经常会出现计数问题,解决计数问题的思路一般有以下三种:

1)只取需要的。将各种符合条件的情形枚举出来,再利用加法原理求和。

2)先取后排。将各步符合条件的排列或组合计算出来,再根据乘法原理求积。

3)先全部取,再减去不要的。利用容斥定理,将各种符合条件的情形枚举出来,再减去不符合条件的。

排列数

从 n n n个不同元素中取出 m ( m < = n ) m(m<=n) m(m<=n)个元素的所有排列的个数,叫做从 n n n个不同元素中取出 m m m个元素的排列数,⽤符号 A n m A_n^m Anm​表示
A n m = n ! ( n − m ) ! A_n^m=\frac{n!}{(n-m)!} Anm​=(n−m)!n!​

组合数

从 n n n个不同元素中取出 m m m个元素的所有组合的个数,叫做从 n n n个不同元素中取出 m m m个元素的组合数。⽤符号 C n m C_n^m Cnm​或 C ( n , m ) C(n,m) C(n,m)来表示
C n m = A n m m ! = n ! m ! ( n − m ) ! C_n^m=\frac{A_n^m}{m!}=\frac{n!}{m!(n-m)!} Cnm​=m!Anm​​=m!(n−m)!n!​

组合恒等式

1) C n m = C n n − m C_n^m=C_n^{n-m} Cnm​=Cnn−m​

2) 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​ ★

3) C n m = n m C n − 1 m − 1 C_n^m=\frac{n}{m}C_{n-1}^{m-1} Cnm​=mn​Cn−1m−1​

4) C n m + 1 = n − m m + 1 ∗ C n m C_n^{m+1}=\frac{n-m}{m+1}*C_n^m Cnm+1​=m+1n−m​∗Cnm​

5) ( a + b ) n = ∑ k = 0 n C n k a n − k b k (a+b)^n=\sum_{k=0}^nC_n^ka^{n-k}b^{k} (a+b)n=∑k=0n​Cnk​an−kbk(二项式定理)

特殊展开: 2 n = C n 0 + C n 1 + . . . + C n n − 1 + C n n 2^n=C_n^0+C_n^1+...+C_n^{n-1}+C_n^n 2n=Cn0​+Cn1​+...+Cnn−1​+Cnn​

6) C n m C_n^m Cnm​ 为奇数时有 n&m=n

求组合数的方法

递推求组合数 O ( n m ) O(nm) O(nm)

// c[a][b] 表示从a个苹果中选b个的方案数
for (int i = 0; i < N; i ++ )for (int j = 0; j <= i; j ++ )if (!j) c[i][j] = 1;else c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;

乘法逆元求组合数 O ( n ) O(n) O(n)

首先预处理出所有阶乘取模的余数fact[N],以及所有阶乘取模的逆元infact[N]
如果取模的数是质数,可以用费马小定理求逆元
int qmi(int a, int k, int p)    // 快速幂模板
{int res = 1;while (k){if (k & 1) res = (LL)res * a % p;a = (LL)a * a % p;k >>= 1;}return res;
}// 预处理阶乘的余数和阶乘逆元的余数
fact[0] = infact[0] = 1;
for (int i = 1; i < N; i ++ )
{fact[i] = (LL)fact[i - 1] * i % mod;infact[i] = (LL)infact[i - 1] * qmi(i, mod - 2, mod) % mod;
}

杨辉三角形打表 O ( n m ) O(nm) O(nm)

1 1 1
11 11 11
121 1 21 121
1331 1 3 3 1 1331
14641 1 4 6 4 1 14641

我们不难发现其规律,每个数字等于其左上和上端的值,给定第 i i i行第 j j j列有,
a [ i ] [ j ] = a [ i − 1 ] [ j ] + a [ i − 1 ] [ j − 1 ] a[i][j] =a[i-1][j]+a[i-1][j-1] a[i][j]=a[i−1][j]+a[i−1][j−1]
组合恒等式有: 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​ ★
那么,杨辉三角形第 i i i行第 j j j列可表示为: c i j c_ i^ j cij​

     f[0][0]=1;for(int i = 1; i < N; i++)for(int j = 1; j <= i + 1; j++)f[i][j] = f[i - 1][j] + f[i - 1][j - 1];

排列组合的应用

逐分法

需要分步骤完成的事件,我们首先想到的是乘法原理,对待事件逐一分配。

【例题】现在有12位警察,要分到3个路口每个路口4个人有多少种方案

【解析】第一个路口有 C 12 4 C_{12}^4 C124​种选法,因为第一个路口已经用去了4位警察,所以第二个路口就只有 C 8 4 C_8^4 C84​种了,第三个也只有 c 4 4 c_4^4 c44​种了,根据乘法原理就可以得出总共的方案数就是 C 12 4 × C 8 4 × C 4 4 C_{12}^4×C_8^4×C_4^4 C124​×C84​×C44​

捆绑法

要求元素相邻时,先整体考虑,将相邻元素视作一个大元素进行排序,然后再考虑大元素内部各元素间顺序。

【例题】由数字1、2、3、4、5、6、7组成无重复数字的七位数,求三个偶数必相邻的七位数的个数。

【解析】因为三个偶数2、4、6必须相邻,所以先将2、4、6三个数字“捆绑”在一起有 A 3 3 A_3^3 A33​=6种不同的“捆绑”方法;再将捆绑后的元素与1、3、5、7进行全排列,有 A 5 5 A_5^5 A55​=120种方法,根据乘法原理共有6×120=720种不同的排法,所以共有720个符合条件的七位数。

插空法

要求元素不相邻时,先将其他元素排好,再将所指定的不相邻的元素插入它们的间隙或两端位置,从而解决问题。

【例题】由数字1、2、3、4、5、6、7组成无重复数字的七位数,求三个偶数互不相邻的七位数的个数。

【解析】因为三个偶数2、4、6互不相邻,所以先将1、3、5、7四个数字排好,有 A 4 4 A_4^4 A44​=24种不同的排法,再将2、4、6分别“插入”到第一步排的四个数字的五个“间隙”(包括两端的两个位置)中的三个位置上,有 A 5 3 A_5^3 A53​=60种排法,根据乘法原理共有24×60=1440种不同的排法,所以共有1440个符合条件的七位数。

隔板法

把 n n n个相同的苹果分给 k k k个人,要求每个人至少分到一个,求方案数。

把 n n n个苹果排成一排,在其中插入 k − 1 k−1 k−1块隔板,表示 k k k个人分到的部分。

插隔板的方法与分苹果的方案是一一对应的,那么方案数为 C n − 1 k − 1 C_{n−1}^{k−1} Cn−1k−1​
那么如果有人可以分到 0 0 0个苹果呢?

我们给每个人多分一个苹果,使得每个人至少分配到一个苹果,在分配完之后再将每个人的苹果拿走一个。

那么方案数为 C k + n − 1 k − 1 C_{k+n−1}^{k-1} Ck+n−1k−1​(先给k个苹果,让他们一人一个,再分n个苹果。)
隔板法与不定方程整数解的问题
求不定方程 x 1 + x 2 + x 3 + x 4 + . . . + x k = n x_1+x_2+x_3+x_4+...+x_k=n x1​+x2​+x3​+x4​+...+xk​=n的解的个数,要求 x i > d i x_i>d_i xi​>di​
设 y i = x i − d i > 0 y_i=x_i-d_i>0 yi​=xi​−di​>0
那么有 y 1 + y 2 + y 3 + . . . + y k = n − ( d 1 + d 2 + d 3 + . . . + d k ) y_1+y_2+y_3+...+y_k=n-(d_1+d_2+d_3+...+d_k) y1​+y2​+y3​+...+yk​=n−(d1​+d2​+d3​+...+dk​)
答案: C n − ( d 1 + d 2 + d 3 + . . . + d k ) − 1 k − 1 C_{n-(d_1+d_2+d_3+...+d_k)-1}^{k-1} Cn−(d1​+d2​+d3​+...+dk​)−1k−1​

(1) O − O − O − O − O − O − O − O − O − O O-O-O-O-O-O-O-O-O-O O−O−O−O−O−O−O−O−O−O 9个空插3个隔板

答案为: C 9 3 C_9^3 C93​

(2)非负整数意为 x i x_i xi​可以是0,我们可以
( x 1 + 1 ) + ( x 2 + 1 ) + ( x 3 + 1 ) + ( x 4 + 1 ) = 14 (x_1+1)+(x_2+1)+(x_3+1)+(x_4+1)=14 (x1​+1)+(x2​+1)+(x3​+1)+(x4​+1)=14
即为: y 1 + y 2 + y 3 + y 4 = 14 y_1+y_2+y_3+y_4=14 y1​+y2​+y3​+y4​=14,13个空隙中插3个隔板
答案为: C 13 3 C_{13}^3 C133​

(3)根据设 y i = x i − d i > 0 y_i=x_i-d_i>0 yi​=xi​−di​>0
( x 1 + 3 ) + ( x 2 + 2 ) + ( x 3 + 1 ) + ( x 4 − 1 ) = 15 (x_1+3)+(x_2+2)+(x_3+1)+(x_4-1)=15 (x1​+3)+(x2​+2)+(x3​+1)+(x4​−1)=15
即为: y 1 + y 2 + y 3 + y 4 = 15 y_1+y_2+y_3+y_4=15 y1​+y2​+y3​+y4​=15,14个空隙中插3个隔板
答案为: C 14 3 C_{14}^3 C143​

组合数学_排列与组合相关推荐

  1. 排列公式和组合公式_排列与组合:排列公式与组合公式之间有什么区别?

    排列公式和组合公式 Here's the short version. 这是简短的版本. Let's take ringing bells in a church as an example. 让我们 ...

  2. 【组合数学】排列组合 ( 集合排列、分步处理示例 )

    文章目录 一.集合排列.分步处理示例 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | 二项式定理 ...

  3. 【组合数学】排列组合 ( 多重集组合数示例 | 三个计数模型 | 选取问题 | 多重集组合问题 | 不定方程非负整数解问题 )

    文章目录 一.多重集组合示例 二.三个计数模型 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | ...

  4. 【组合数学】排列组合 ( 多重集组合数 | 所有元素重复度大于组合数 | 多重集组合数 推导 1 分割线推导 | 多重集组合数 推导 2 不定方程非负整数解个数推导 )

    文章目录 一.多重集组合 ( 所有元素重复度大于组合数 ) 二.多重集组合 所有元素重复度大于组合数 推导 1 ( 分割线推导 ) 二.多重集组合 所有元素重复度大于组合数 推导 2 ( 不定方程非负 ...

  5. 【组合数学】排列组合 ( 多重集排列 | 多重集全排列 | 多重集非全排列 所有元素重复度大于排列数 | 多重集非全排列 某些元素重复度小于排列数 )

    文章目录 一.多重集 二.多重集全排列 三.多重集全排列示例 三.多重集非全排列 1 所有元素重复度大于排列数 ( ni≥rn_i \geq rni​≥r ) 四.多重集非全排列 2 某些元素重复度小 ...

  6. 【组合数学】排列组合 ( 排列组合示例 )

    文章目录 一.排列组合示例 1 ( 组合 | 乘法法则 | 加法法则 ) 二.排列组合示例 2 参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示 ...

  7. 【组合数学】排列组合 ( 排列组合内容概要 | 选取问题 | 集合排列 | 集合组合 )

    文章目录 一.排列组合内容概要 二.选取问题 三.集合排列 四.环排列 五.集合组合 参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排 ...

  8. 算法之组合数学及其算法篇(一) ----- 排列与组合

    组合数学及其算法篇 前言 排列与组合 无重集的排列与组合 无重集的排列 应用例子 无重集的组合 应用例子 重集的排列和组合 重集的排列 重集的组合 前言 组合数学研究的对象是组态.所谓组态就是指若干个 ...

  9. 组合数学$1排列组合

    C1 排列组合 S0 计数原理 1)加法原理: S = S 1 + S 2 + ⋯ + S k , S i ∩ S j = ∅ ⟹ ∣ S ∣ = ∑ i ∣ S i ∣ \mathbb{S = S_ ...

最新文章

  1. 通过代码自定义cell(cell的高度不一致)
  2. Ajax的get、post和ajax提交
  3. 新手入门深度学习 | 2-2:结构化数据建模流程示例
  4. 支付产品——收银台设计详解
  5. 深入理解Spark 2.1 Core (十):Shuffle Map 端的原理与源码分析
  6. 5款新颖的ReSharper插件
  7. 专题五:MATLAB数据分析与多项式计算
  8. MATLAB学习八(二):标准差std
  9. 新手如何让淘宝店铺的销量提升, 该如何做!
  10. POI 模板生成word PDF——牛X神器
  11. 前端如何压缩图片质量
  12. Labview八段数码管0—9数字显示
  13. 随机编码生成器MD5加密字符串工具
  14. python加权最小二乘_如何计算加权最小二乘法的样本权重?
  15. WIN10-VS2019-SeetaFace6编译
  16. python全套数据分析课程_B 站疯传,堪称最强,一整套Python数据分析课程,学完月薪30K+!...
  17. vue 避免全局样式污染的正确做法
  18. t.l346y.cn.php,Dell EMC PowerEdge T340 离线安装 LNMP 环境
  19. 2017高考计算机考试大纲,2017高考全国统一考试大纲及考试说明
  20. 小晶粒zsm分子筛合成表征实验报告_小晶粒ZSM-5分子筛的合成

热门文章

  1. Python脚本——信手拈来的自动化测试工具
  2. python逆序输出_python倒序输出
  3. 数字图像直方图处理涉及的数学知识介绍
  4. 亚洲研究院微软笔试题
  5. Python-OpenCV API
  6. Java:Exceptions相关学习
  7. 帝国CMS7.5全新后台 仿搜外问答模板 整站带演示数据源码
  8. 自己写的一个LOL云顶智之奕小工具
  9. 计算机键盘被锁怎么解,解开电脑键盘锁的小窍门
  10. 软件工程Alpha冲刺day6