OI内的排列与组合(简单版)
§1基本原理
△让我们来看下面问题:
从甲地到乙地,可以乘火车,也可以乘汽车,还可以乘轮船。一天中,火车有4班,汽车有2班,轮船有3班。那么,一天中乘坐这些交通工具从甲地到乙地共有多少种不同走法?
△分析:因为从甲地到乙地,乘火车有4种选择(方法),乘汽车有2种选择(方法),乘轮船有3种选择(方法)。因此,一天中乘坐这些交通工具从甲地到乙地共有:4+2+3 = 9种不同的方法。
▲一般地,做一件事,完成它可以有n类方法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,……,在第n类办法中有m n种不同的方法,
那么完成这件事共有:N = m1+m2+…+m n种不同的方法。
一、加法原理:
△再看这样一个例子:
由A村去B村的道路有3条,由B村去C村的道路有2条(如下图所示)。从A村经B村去C村,共有多少种不同的走法?
△分析:从A村到B村有3种不同的走法,按这3种走法中的每一种走法到达B村后,再从B村到C村又有2种不同的走法。因此,从A村经B村去C村共有:3×2 = 6种不同的走法。
▲一般地,做一件事,完成它需要分成n个步骤,做完第一步有m1种不同的方法,做完第二步有m2种不同的方法,……,做第n步有m n种不同的方法。
那么,完成这件事共有:N = m1×m2×…×m n种不同的方法。
二、乘法原理:
〖举例〗
1. 书架上层放有6本不同的数学书,下层放有5本不同的语文书。
⑴从中任取一本,有多少种不同的取法?
⑵从中任取数学书与语文书各一本,有多少种不同的取法?
解:⑴分析:从书架上任取一本书,有两类情况:第1类情况是从上层取数学书,可以从6本书中任取一本,有6种方法;第2类情况是从下层取语文书,可以从5本书中任取一本,有5种方法。
根据加法原理,得到不同的取法的种数是: N = 6+5 = 11
⑵分析:从书架中任取数学书与语文书各一本,可以分成两个步骤:第1步取一本数学书,有6种方法;第2步取一本语文书,有5种方法。
根据乘法原理,得到不同的取法的种数是:N = 6×5 = 30
2. 由数字1,2,3,4,5可以组成多少个三位数(各位上的数字允许重复)?
解:分析:要组成一个三位数可以分成三个步骤:
根据乘法原理,得到可以组成的三位数的个数是:N = 5×5×5 = 5 3 = 125
▲不难发现,加法原理的要点是一个“类”字,乘法原理的要点是一个“步”字,即分“类”时用加法原理;分“步”时用乘法原理棗分清“类”与“步”是正确解题的关键。
△练习:
1.在读书活动中,一个学生要从2本科技书、2本政治书、3本文艺书里任选一本,共有多少种不同的选法?
2.乘积(a1+a2+a3)(b1+b2+b3+b4)(c1+c2+c3+c4+c5)展开后共有多少项?
3.如下图所示,从甲地到乙地有2条陆路可走,从乙地到丙地有3条陆路可走,又从甲地不经过乙地到丙地有2条水路可走。
⑴从甲地经乙地到丙地有多少种不同的走法?
⑵从甲地到丙地共有多少种不同的走法?

§2排列
△让我们来看下面这个例子:





巧用“捆绑”、“插空”、“分组”法解决排列组合题目
在求解排列组合问题时,经常遇到有关几个元素必须相邻、几个元素互不相邻、将n个元素分成m组的问题。现将此类问题的解法通过例题介绍如下。
例1 由数字1、2、3、4、5、6、7组成无重复数字的七位数。(1)求三个偶数必相邻的七位数的个数;(2)求三个偶数互不相邻的七位数的个数。
解 (1):因为三个偶数2、4、6必须相邻,所以要得到一个符合条件的七位数可以分为如下三步:第一步将1、3、5、7四个数字排好有P(4,4)种不同的排法;
第二步将2、4、6三个数字“捆绑”在一起有P(3,3) 种不同的“捆绑”方法; 第三步将第二步“捆绑”的这个整体“插入”到第一步所排的四个不同数字的五个“间隙”(包括两端的两个位置)中的其中一个位置上,有P(1,5)种不同的“插入”方法。根据乘法原理共有P(4,4)*P(3,3)*P(5,1)=720种不同的排法。所以共有720个符合条件的七位数。
解(2):因为三个偶数2、4、6 互不相邻,所以要得到符合条件的七位数可以分为如下两步:第一步将1、3、5、7四个数字排好,有P(4,4) 种不同的排法;
第二步将2、4、6分别“插入”到第一步排的四个数字的五个“间隙”(包括两端的两个位置)中的三个位置上,有P(3,5) 种“插入”方法。根据乘法原理共有P(4,4)*P(3,5)=1440种不同的排法。所以共有1440个符合条件的七位数。
例2 将A、B、C、D、E、F分成三组,共有多少种不同的分法?
解:要将A、B、C、D、E、F分成三组,可以分为三类办法:(1-1-4)分法、(1-2-3)分法、(2-2-2)分法。下面分别计算每一类的方法数:
第一类(1-1-4)分法,这是一类整体不等分局部等分的问题,可以采用两种解法。解法一:从六个元素中取出四个不同的元素构成一个组,余下的两个元素各作为一个组,有C(4,6)种不同的分法。
解法二:从六个元素中先取出一个元素作为一个组有C(1,6) 种选法,再从余下的五个元素中取出一个元素作为一个组有C(1,5) 种选法,最后余下的四个元素自然作为一个组,由于第一步和第二步各选取出一个元素分别作为一个组有先后之分,产生了重复计算,应除以P(2,2)。所以共有C(1,6)*C(1,5)/P(2,2) =15种不同的分组方法。
第二类(1-2-3)分法,这是一类整体和局部均不等分的问题,首先从六个不同的元素中选取出一个元素作为一个组有C(1,6) 种不同的选法,再从余下的五个不同元素中选取出两个不同的元素作为一个组有C(2,5) 种不同的选法,余下的最后三个元素自然作为一个组,根据乘法原理共有C(1,6)*C(2,5)=60种不同的分组方法。
第三类(2-2-2)分法,这是一类整体“等分”的问题,首先从六个不同元素中选取出两个不同元素作为一个组有C(2,6) 种不同的取法,再从余下的四个元素中取出两个不同的元素作为一个组有C(2,4)种不同的取法,最后余下的两个元素自然作为一个组。由于三组等分存在先后选取的不同的顺序,所以应除以P(3,3) ,因此共有C(2,6)*C(2,4)/P(3,3) =15种不同的分组方法。
根据加法原理,将A、B、C、D、E、F六个元素分成三组共有:15+60+15=90种不同的方法。
例3 一排九个坐位有六个人坐,若每个空位两边都坐有人,共有多少种不同的坐法?
解:九个坐位六个人坐,空了三个坐位,每个空位两边都有人,等价于三个空位互不相邻,可以看做将六个人先依次坐好有P(6,6)种不同的坐法,再将三个空坐位“插入”到坐好的六个人之间的五个“间隙”(不包括两端)之中的三个不同的位置上有C(3,5)种不同的“插入”方法。根据乘法原理共有P(6,6)*C(3,5)=7200种不同的坐法。
小结:(1)m个不同的元素必须相邻,有P(m,m) 种“捆绑”方法。
(2)m个不同元素互不相邻,分别“插入”到n个“间隙”中的m个位置有 P(m,n)种不同的“插入”方法。
(3)m个相同的元素互不相邻,分别“插入”到n个“间隙”中的m个位置,有C(m,n)种不同的“插入”方法。
(4)若干个不同的元素“等分”为 m个组,要将选取出每一个组的组合数的乘积除以P(m,m)。
希望这篇博文对您有所帮助!!
OI内的排列与组合(简单版)的更多相关文章
- 【组合数学】OI内的排列与组合(简单版)
§1基本原理 △让我们来看下面问题: 从甲地到乙地,可以乘火车,也可以乘汽车,还可以乘轮船.一天中,火车有4班,汽车有2班,轮船有3班.那么,一天中乘坐这些交通工具从甲地到乙地共有多少种不同走法?△分 ...
- Lucene.net站内搜索—3、最简单搜索引擎代码
目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...
- 字符串数组元素排列与组合的Java递归实现
我们在笔试面试过程中经常会遇到关于排列与组合的问题,其实这些可以通过递归简单的实现,看下面两个例子: (1)关于字符串排列的问题 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串ab ...
- 排列与组合的C语言实现
排列与组合是数学里的经典问题,由这个问题可引申出子集.字典排序等问题,那么,我们先看经典的排列与组合,怎么在程序里实现. 在网上搜了一下,关注这个问题的人还是挺多的,有不了人给出的回答是使用几个for ...
- 模板】AC自动机(简单版)
模板]AC自动机(简单版) https://www.luogu.org/problemnew/show/P3808 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保 ...
- 动手写一个简单版的谷歌TPU-矩阵乘法和卷积
谷歌TPU是一个设计良好的矩阵计算加速单元,可以很好的加速神经网络的计算.本系列文章将利用公开的TPU V1相关资料,对其进行一定的简化.推测和修改,来实际编写一个简单版本的谷歌TPU.计划实现到行为 ...
- JavaMail简单版实验测试
前言: 最近由于实现web商城的自动发送邮件功能的需求,故涉猎的邮箱协议的内部原理.现将简单版的Java Mail实例做个代码展示,并附上其中可能出现的bug贴出,方便感兴趣的读者进行测试! 1.载入 ...
- 小米抢购(简单版v0.1)-登录并验证抢购权限,以及获取真实抢购地址
小米(简单版)-登录并验证抢购权限,以及获取真实抢购地址! 并不是复制到浏览器就行了的 还得传递所需要的参数 这里只是前部分 后面的自己发挥了 { "stime": 1389 ...
- dfs 生成排列和组合
利用深度优先搜索的性质可以方便的生成n的排列和组合,但是生成组合时每个组合里面元素的个数必须事先确定,以前以为生成组合跟排列一样到n时就可以回溯,直到今天做了某题之后才发现那是错的,那样做生成不了所有 ...
随机推荐
- win7热点设置
1.设置热点名称与密码 netsh wlan set hostednetwork mode=allow ssid=costa key=11112222pause 2.开启 netsh wlan sta ...
- AppServ安装的一点小麻烦----
好久,没装AppServ了,今天安装过程顺利,但是Apache,服务开启不了,页面也不能访问. 刚开始以为是版本下载错误了,先后换了N个版本,都不行. 在网上搜的过程中,偶然发现,一句话:64位系统, ...
- 透过源码看看Redis中如何计算QPS
通常我们采集Redis的性能数据时,或者想要知道Redis当前的性能如何时,需要知道这个实例的QPS数据,那么这个QPS数据是如何计算的呢?我们都有哪些办法或者这个QPS ? QPS顾名思义就是每秒执 ...
- 【原创】源码角度分析Android的消息机制系列(三)——ThreadLocal的工作原理
ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 先看Android源码(API24)中对ThreadLocal的定义: public class ThreadLocal<T> 即 ...
- [0] TFS 分支/标签
比较常见的版本控制分支策略有三种:不稳定主干策略.稳定主干策略.敏捷发布策略. 下面是对这几种策略的摘录: 不稳定主干策略 使用用主干作为新功能开发主线,分支用作发布. 被广泛的应用于开源项目. 比较 ...
- js替换字符串中所有指定的字符
第一次发现JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replac ...
- vue组件(Vue+webpack项目实战系列之三)
组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.特别对于大型应用开发来说,尽量组件化,并且先造好轮子库,不要重复去写组件,这会显著提升项目 ...
- Java线程池入门必备
线程池 一. 线程池的简介 1.什么是线程池? 最早期的工作线程处理任务的模型.一个任务的到来,会伴随着线程的创建,当处理完任务后,线程会被销毁,资源回收.这种一个任务一个线程一系列创建销毁的模式 ...
- win7双系统安装openSUSE13.2解决【引导加载器安装期间出错】问题
原始日期:2015-08-17 14:16 昨晚不知道哪根筋不对,突然想装一个liunx系统,与win7形成双系统,最终选定openSUSE13.2,想想以前也安装过Ubuntu,应该差不多,所以直接 ...
- css实现选项卡
<style> *{ margin: ; padding: ; text-decoration: none; list-style: none; outline:none; } .box{ ...