实用枚举算法(上课).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文档。上传文档
查看更多
第一讲 枚举算法 数计学院 计算机系 简武斌 什么是枚举法 什么是枚举法 算法分析: 用x,y,z分别表示买的公鸡,母鸡,小鸡的数 目,可以得到一个很简单的方程组 枚举法的定义 枚举法(通常也称为穷举法) 指的是从可能的解的集合中一一枚举 各元素, 用题目给定的检验条件判 定哪些是无用的,哪些是有用的。 能使命题成立的,即为其解。 枚举法解题的基本思路 (1) 确定枚举对象、枚举范围和判定条件 例1 百鸡问题 int x,y,z; for(x=0;x100;x++)   for(y=0;y100;y++)   for(z=0;z100;z++) //枚举所有可能的解   if (x+y+z=100)and(x*3+y*2+z/ 3=100)and(z mod 3=0) printf(x=+x+y=+y+z=+z); 例1 百鸡问题 int x,y,z; for(x=0;x100;x++)  for (y=0;y100-x;y++)   z=100-x-y;   if (x*3+y*2+z/3=100)and(z mod 3=0) printf(x=+x+y=+y+z=+z);    例2 Joseph问题 有n个人围坐在一个圆桌周围,把这n个人依次编号为1,…,n。从编号是1的人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报。 现有前面k个中国人,后面k个日本人坐在一起.对于给定的k。求出m的最小值,使得中国人是在所有日本人出列之后出列。假设:1k14 样例  输入:k=3  输出:m=5 例2 Joseph问题 算法分析: 我们可以枚举m=k+1,然后来判断每个m是否符合条件,如果符合条件,那么就输出结果。因为k最大为14,所以这个题可以用枚举法。 总 结 枚举算法的缺点是:运算量比较大,解题效率不高 练习题1 练习题2 * * 例1: 有个人有一百块钱,打算买一百只鸡。 市场价格是:公鸡一只3元,母鸡一只5元, 小鸡3只1元。 试求用100元买100只鸡,各为多少才合适? 3*x+5*y+z/3=100 x+y+z=100 (2) 一一枚举可能的解,验证是否是问 题的解 (3) 枚举算法的一般结构:各种循环语句 三种鸡的和是固定的,我们只要枚举二种鸡(x,y),第三种鸡就可以根据约束条件求得(z=100-x-y),缩小了枚举范围, 提示:按照某个长度m遍历一个长度为2k的数组环的方法: int count=0; int travel=-1; while(countm){ travel=(travel+1)%2k; …..} 枚举算法的优点:思路简单,程序编写和调试方便 如果题目的规模不是很大,在规定的时间与空间限制内能够求出解,那么我们最好是采用枚举法 问题描述 将1,2...9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。 (1998年全国分区联赛普及组试题) 问题描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值=1。 要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。 提示:记方程f(x)=0,若存在2个数x1和x2,且x1x2,f(x1)*(x2)0,则在(x1,x2)之间一定有一个根。 样例  输入:1 -5 -4 20  输出:-2.00 2.00 5.00 * * *

文档评论(0)

三四五 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档