组合数学在程序设计竞赛中的应用.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

组合数学在程序设计竞赛中的应用

〔一〕软件学院2003级穆浩英

内容提要排列组合和容斥原理群论与Polya定理递推关系

两个根本原那么1、加法原那么 如果完成一件事情有两种方案,而第一个方案有m种方法,第二个方案有n中方法,那么完成该事情共有m+n种方法。2、乘法原那么 如果完成一件事情需要两个步骤,第一步有m中方法,第二步又有n种方法,那么完成该事情共有m*n种方法

排列组合的几个根本结论1、相异元素不允许重复的排列数和组合数:n!(n-r)!P(n,r)=C(n,r)=n!(n-r)!r!2、不尽相异元素的全排列RP(n,n)=n!n1!n2!...nt!

排列组合的几个根本结论3、相异元素不允许重复的圆排列 CP(n,n)=P(n,n)n4、相异元素允许重复的组合数集合描述:设S={∞·e1,∞·e2,……∞·en,},从S中允许重复地取出r个元素,称为r可重组合RC(∞,r)=C(n+r-1,r)=(n+r-1)!r!(n-1)!

排列组合例题例1:电子锁 某机要部门安装了电子锁。M工作人员每人发一张磁卡,卡上有开锁的密码特征,为了确保平安,规定至少有N人同时使用各自的磁卡才能将锁翻开。 现在需要计算一下,电子锁上至少要有多少种特征,每个人的磁卡上至少要有多少特征。

排列组合例题先做一个简单的假设:M=7,N=4。对于问题一:任意3人在一起,至少缺一种特征,不能翻开。电子锁的至少应有C(7,3)=35种特征。对于问题二:对任一位工作者的磁卡而言,其余6人中任意3人在场至少缺少一种A所具有的特征而无法翻开大门。每张磁卡至少应有C(6,3)=20种特征所以总终答案是C(M,N-1)和C(M-1,N-1)

排列组合例题例2:zju1976PathOnaGrid求n*m的方格图形中,从点〔0,0〕到点〔n,m〕的最短路径数目〔0,0〕〔n,m〕SampleInput〔给定n,m〕54

11

00

SampleOutput(路径数目)126

2

排列组合例题 我们用组合数学的思路来解题。最短路径必定是一条只向右上走得路。设向右走一步为x,向上走一步为y。那么每一条路线一定对应由n个x,m个y共m+n个元素组成的排列。以n=5,m=4为例,任意一条路线如以下图所示,对应的xy序列为:xyxxxyxyy可见,只要能确定9个位置中4个y的位置就唯一确定了一条路径。所以,此题答案就是C(n+m,m)

排列组合数的一般计算方法20!12!8!C(20,12)=怎么计算?设计一个求阶乘的函数?20!=243290200817664000012!=4790016008!=40320C(20,12)=125970显然20!用int表示一定是失败的,而C(20,12)的结果又完全可以用int来表示。回想我们是怎么计算的?先约分再计算!

排列组合数的一般计算方法〔一〕计算组合数的函数intgcd(inta,intb){ if(b==0)returna; elsereturngcd(b,a%b);}//欧几里德辗转相除法求最大公约数intC(intn,intm){ inti,a,fz=1,fm=1; for(i=1;i=m;i++) { fz*=(n-i+1); fm*=i; a=gcd(fz,fm); fz/=a; fm/=a; } returnfz/fm;}分子分母

排列组合数的一般计算方法〔二〕使用double类型doubleC2(intn,intm){doubleproduct;inti;for(i=m;i=1;i--){product=product/i*(n+i);}returnproduct;}/*在输出结果是应该注意要以整数形式输出.*/#includeiostream#includeiomanipusingnamespacestd;intmain{ intn,m; cinnm; coutsetiosflags(ios::fixed)setprecision(0)C2(n,m)endl; return0;}

排列的生成算法字典序法: 顾名思义,这种方法就是将所有n元排列按“字典顺序〞排成队,以12……n为第一个排列,排序规那么,即:由一个排列P(p1,p2……pn)直接生成下一个排列的算法可归结为:〔1〕求满足pk-1pk的k的最大值,设为i,即i=max{k|pk-1pk}〔2〕求满足pi-1

文档评论(0)

寒傲似冰 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8071104010000026

1亿VIP精品文档

相关文档