信息奥赛—穷举.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文档。上传文档
查看更多
信息奥赛—穷举

问题1:火柴棒等式 【问题描述】 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示: 注意: 1.加号与等号各自需要两根火柴棍 2.如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C=0) 3.n根火柴棍必须全部用上。 【输入】输入文件matches.in共一行,又一个整数n(n=24)。 【输出】输出文件matches.out共一行,表示能拼成的不同等式的数目。 问题分析: 本题选自noip2008提高组试题。 设等式三个变量为A、B、C,如果已知A和B,则C=A+B。由于题目给出的火柴数目范围很小,选择枚举算法,枚举A、B值,求得C值,累计满足等式A+B=C所用的火柴数目为输入值即获得问题的解。对于本题,我们能否从细节上提高枚举算法的效率呢? 1.根据n=24条件,确定枚举A和B的范围。即如果都使用最少火柴的数字(如数字1)构造表达式中的数,得到最大的数是多少,可以算出该数1000,因此A和B的范围为0~1000; 2、在枚举表达式过程中,需要反复计算每个数所用的火柴数目,即相同的数有可能重复计算许多次的火柴数目,显然,需要想办法减少重复计算。先进行预处理,将估算范围内的数所用的火柴数目算出; 3、枚举过程中如果当前数的火柴数目超过输入限制做剪枝处理。 算法描述: 预处理:求0~2000数对应的火柴数目; 使用循环枚举A值0~1000,执行下列操作: 判断A值的火柴数目是否超过限制值,是的,剪枝,跳过该数的处理; 否,使用循环枚举B值0~1000,执行下列操作: ①判断A和B值的火柴数目和是否超过限制值,是的,剪枝,跳过该数的处理; ②否,求C值,若A、B、C值火柴数目和等于限制值,计数方案数; 3.输出方案数。 3、枚举A和B,判断累计最后输出。 火柴棒等式 1、根据n=24条件,确定枚举A和B的范围; 2、如果每次计算每个数字的火柴数,可以发现重复操作了,预处理的作用通常是降重复操作次数,本题可以将估算范围内的所有数数所用的火柴数目求出; 程序框架: readln(n); f[0]:=6; f[1]:=2; f[2]:=5; f[3]:=5; f[4]:=4; //0~9需要的火柴棒数 f[5]:=5; f[6]:=6; f[7]:=3; f[8]:=7; f[9]:=6; for i:= 10 to maxn*2 do //预处理0~2000每个数需要的火柴棒数 begin x:=i; while x0 do begin f[i]:= f[i]+f[x mod 10]; x:=x div 10; end; end; ans:=0; n:=n-4;//总火柴棒数减去+和=所需的火柴棒数 for i:= 0 to maxn do //枚举A begin if f[i]=n then continue; //剪枝,继续i循环 for j:= 0 to maxn do//枚举B begin if f[i]+f[j]=n then continue;//剪枝,继续j循环 k:=i+j; if f[i]+f[j]+f[k]=n then inc(ans);//符合条件,总数加1 end; end; writeln(ans); 小结: 穷举算法从本质上说,它是一种搜索算法。适合穷举策略求解的问题,首先必须满足其问题规模和可能解的规模(个数)不是特别大,且解变量的值的变化具有一定的规律性。 由于穷举算法运行时所花费的时间量大,应对它尽可能进行优化,提高效率。 无线蹭网……等等 * * 答案】四种方案: 公鸡 母鸡 小鸡 ① 0 25 75 ② 4 18 78 ③ 8 11 81 ④ 12 4 84 优化: 小鸡=100-公鸡-母鸡 * 2+46+987=1035,2+64+987=1053,3+45+978=1026,3+74+985=1062,4+35+987=1026 * 本题是一个搜索问题,搜索范围 2~1000,找出该范围内的完全数; 完全数必须满足的条件:因子的和等于该数据的本身。 问题关键在于将该数的因子一一寻找出来,并求出因

文档评论(0)

wyjy + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档