排列组合及其在noip中的应用

排列组合及其在noip中的应用

ID:8836587

大小:68.50 KB

页数:12页

时间:2018-04-09

排列组合及其在noip中的应用_第1页
排列组合及其在noip中的应用_第2页
排列组合及其在noip中的应用_第3页
排列组合及其在noip中的应用_第4页
排列组合及其在noip中的应用_第5页
资源描述:

《排列组合及其在noip中的应用》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、排列组合及其在NOIP中的应用  我们在数学课里面学过排列组合的基础知识,内容大致如下:这些知识,在信息学分区联赛中有着极其广泛的应用。初赛和复赛有所不同:在初赛中,主要考查大家对排列、组合的理解,要求大家能够正确的使用排列数的计算公式和组合数的计算公式;复赛则要求大家能够比较深入的领会排列的产生过程和组合的产生过程。例1:(第八届全国青少年信息学奥林匹克分区联赛(普及组PASCAL语言)第二大题第2小题)将N个红球和M个黄球排成一行。例如:N=2,M=2可得到以下6种排法:红红黄黄 红黄红黄 红黄黄红 黄

2、红红黄 黄红黄红 黄黄红红问题:当N=4,M=3时有多少种不同排法?(不用列出每种排法)分析:要计算出N=4,M=3的排法。球的总数是7个,我们可以理解为:有7个可以用来存放这些球的箱子,如下图       怎样将这些球放入相应的箱子中呢?如果这7个球完全不一样,我们很容易知道,存放的方法就是7的全排列,即:。但实际上,这7个球只分为两种:红球和黄球。所以,只要我们把其中任意一种球的存放位置确定好,问题就算解决了。剩下的球只需往空的箱子里面放。比如,我们要确定红球的存放位置。红球一共有4个。要把4个红球放入

3、已知的7个箱子中,因为这4个红球都是一样的,所以存放的方法实际上就是从7个箱子中任取4个的组合,即:。直接套用组合数公式进行计算 答案为:35种。例2:选数(2002年全国青少年信息学(计算机)奥林匹克分区联赛普及组复赛试题第二题)[问题描述]:已知n个整数x1,x2,…,xn,以及一个整数k(k<=n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部的组合与它们的和为:3+7+12=22 3+7+19=29 7+12+19=38 3+

4、12+19=34现在,要求你计算出和为素数共有多少种。例如上例,只有一种的和为素数:3+7+19=29。[输入]:键盘输入,格式为:              n,k(1<=n<=20,k<=n)              x1,x2,…,xn(1<=xi<=5000000)[输出]:屏幕输出,格式为:一个整数(满足条件的种数)分析:这是一个典型的综合题。要求我们能够综合运用所学过的数学知识和计算机知识对问题进行分析。从数学方面讲,我们需要对素数和组合都有比较深刻的认识。从计算机方面讲,主要涉及了穷举、迭代

5、和递归算法;并且,要求大家能够深入的理解递归算法的执行过程。解决这道题需要做好两个工作:①组合的产生;②素数的判定。可以将已知的n个整数存放在一个数组X中。因为xi的取值范围为1<=xi<=5000000,所以数组元素的数据类型应该定义为长整型(LONG)。需要设计一个算法,判断给定的整数z是素数(质数)还是合数。将此算法定义为一个函数sushu(z),当z为素数时返回函数值0,否则返回函数值1。参考程序如下:functionsushu(zaslong) sushu=0 fori=2tosqr(z)   i

6、fzmodi=0then     sushu=1     exitfor   endif nextendfunction设计组合的产生算法是本题的难点,也是重点。假如有这样一道题:从x1、x2、x3、x4、x5五个数中任意取不同的3个数组成一组,把所有的可能情况列举出来。对这类问题,我们在数学课上是怎样解决的呢?首先,取出的数与顺序无关,例如{x1,x2,x3}和{x2,x1,x3}属于同一组。这是一个组合问题。为了便于列举,我们将每一组中的元素都按顺序排放。每一组由三个元素组成,这三个元素的存放位置,我们

7、从左向右依次编号为位置1、位置2和位置3,如下图:位置1位置2位置3接下来按照上面的约定,依次对每一个位置进行分析。首先将x1放入位置1。当把x1放入位置1之后,可以放入位置2的数还有x2、x3、x4和x5。如果再把x2放入位置2,就只剩下x3、x4和x5可以放入位置3了。同样,如果把x1放入位置1,x3放入位置2,那么可以放入位置3的数有x4和x5;如果把x1放入位置1,x4放入位置2,那么可以放入位置3的数就只有x5了(注意我们上面的约定:每一组数中的元素都按顺序排放。)……如下图:位置1位置2位置3x

8、1x2x3x4x5x3x4x5x4x5x2x3x4x5x4x5x3x4x5在计算机里面,对这一过程我们可以使用递归算法来实现。定义一个过程zh(m,h),从已知数组x中第m个元素开始,任意取h个元素的组合。n为数组x中元素的总数。当h=1时,只需要构造一个for循环对整个数组进行扫描,依次取出数组中的每一个元素即可。这个时候循环变量i的终值为n。当h>1时,我们首先确定存放在位置1的数。如上例,放入位置1的数可以

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。