ImageVerifierCode 换一换
格式:PPT , 页数:37 ,大小:68KB ,
资源ID:12579285      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/12579285.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(枚举及优化.ppt)为本站上传会员【精***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

枚举及优化.ppt

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,枚举及优化,枚举法,枚举法的基本思想是根据提出的问题枚举所有可能状态,并用问题给定的条件检验哪些是需要的,哪些是不需要的。能使命题成立,即为其解。虽然枚举法本质上属于搜索策略,但是它与后面讲的回溯法有所不同。因为适用枚举法求解的问题必须满足两个条件:可预先确定每个状态的元素个数n;,状态元素a1,a2,an的可能值为一个,连续的值域。,设ai1状态元素ai的最小值;aik状态元素ai的最大值(1in),即a11a1a1k,a21a2a2k,ai1aiaik,an1anank,for a1a11 to a1k

2、 do,fo a2a21 to a2k do ,for aiai1 to aik do ,for anan1 to ank do,if 状态(a1,ai,an)满足检验条件,then 输出问题的解;,陶陶摘苹果(apple.pas/c/cpp)【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。,【输入文件】输入文件a

3、pple.in包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。【输出文件】输出文件apple.out包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。【样例输入】100 200 150 140 129 134 167 198 200 111110【样例输出】5,program apple;,var a:array1.10 of integer;,n,i,

4、total:integer;,begin,assign(input,apple.in);,reset(input);,for i:=1 to 10 do read(ai);,readln(n);,close(input);,n:=n+30;,for I:=1 to 10 do,if n=ai then inc(total);,assign(output,apple.out);,rewrite(output);,writeln(total);,close(output);,End.,丑数(ugly),【问题描述】所谓丑数,就是指那些因子只含2,3,5的数。1,2,3,4,5,6,8,9,10,1

5、2,15是最前面的11个丑数。为了方便起见,把1也看作是丑数。请你编写一个程序,输入n,寻找并打印第n个丑数。,【输入数据】,输入文件仅包含一个整数n(0n3000)。,【输出数据】,输出文件仅包含一个整数,表示所求的第n个丑数。,【样例】,ugly.in,11,ugly.out,15,program ugly;,var,i,n,h1,h2,h3:longint;,min:qword;,f:array1.3000 of qword;,begin,assign(input,ugly.in);,reset(input);,assign(output,ugly.out);,rewrite(outpu

6、t);,readln(n);,f1:=1;h1:=1;h2:=1;h3:=1;,for i:=2 to n do,begin,min:=fh1*2;,if 3*fh2min then min:=3*fh2;,if 5*fh3min then min:=5*fh3;,if min=2*fh1 then inc(h1);,if min=3*fh2 then inc(h2);,if min=5*fh3 then inc(h3);,fi:=min;,end;,write(fn);,close(input);,close(output);,end.,班级人数,【问题描叙】,班会评选一级学生,(做出10题

7、以上的有机会参加评选)。最后评选结果班上有超过P%但不足Q%的人被评上了(学生一:听起来像是URAL上的1011。)。现在给你P和Q,你要算出班上最少有多少人。(数据弱了一点,所以好通过)。,【输入格式】,两个实数P,Q。用空格隔开。每个数最多有两位小数。0.00=pqtotal1)and(jtotal2;,until f=true;,close(input);,close(output);,end.,核弹危机,【问题描叙】,安安和庆庆正在玩红警,可不料安安造出了核弹正要发射.(庆庆 _),已知核弹的攻击范围是边长n的正方形,庆庆的基地是边长m的正方形,基地样例:,.#.#,.#.#,#.#,

8、表示房屋,.表示平地,求核弹最多能摧毁多少房屋(被核弹攻击的房屋都会消失,好强啊)。,【输入格式】,第一行基地边长m(10000m0),第二行核弹攻击边长n(10000n-1),接下来m行输入基地,【输出格式】,摧毁最多房屋数,【样例输入】,6,3,.#.#,#,.,.,#.,.#,【样例输出】,5,【时间限制】,每个测试点1s,var,m,n:longint;,a:array1.10002,1.10002 of char;,procedure process;,var,i,j,s,k,l,max:longint;,begin,max:=0;,for i:=1 to m+1

9、n do,for j:=1 to m+1-n do,begin,s:=0;,for k:=0 to n-1 do,for l:=0 to n-1 do if ai+k,j+l=#then inc(s);,if smax then max:=s;,end;,writeln(max);,end;,procedure init;,var,i,j:longint;,begin,readln(m);,readln(n);,for i:=1 to m do,begin,for j:=1 to m do read(ai,j);,readln;,end;,end;,begin,assign(input,nu

10、clear.in);reset(input);,assign(output,nuclear.out);rewrite(output);,init;,process;,close(input);,close(output);,end.,数独验证,【背景描叙】,合肥五十中中风靡一款智力游戏,也就是数独(九宫格),先给你一个数独,并需要你验证是否符合规则。,【问题描叙】,具体规则如下:,每一行都用到1,2,3,4,5,6,7,8,9,位置不限,,每一列都用到1,2,3,4,5,6,7,8,9,位置不限,,每33的格子(共九个这样的格子)都用到1,2,3,4,5,6,7,8,9,位置不限,,游戏的过程

11、就是用1,2,3,4,5,6,7,8,9填充空白,并要求满足每行、每列、每个九宫格都用到1,2,3,4,5,6,7,8,9。,如下是一个正确的数独:,5 8 1 4 9 3 7 6 2,9 6 3 7 1 2 5 8 4,2 7 4 8 6 5 9 3 1,1 2 9 5 4 6 3 7 8,4 3 6 1 8 7 2 9 5,7 5 8 3 2 9 1 4 6,8 9 2 6 7 1 4 5 3,6 1 5 9 3 4 8 2 7,3 4 7 2 5 8 6 1 9,【输入格式】,输入n个数独,你来验证它是否违反规则.,第一行为数独个数,第二行开始为第一个数独,之后为第二个,至第n个.,注意

12、每个数独之间有一个回车隔开!,【输出格式】,若正确则输出”Right”若不正确则输出”Wrong”输出一个换一行,【样例输入】,2,5 8 1 4 9 3 7 6 2,9 6 3 7 1 2 5 8 4,2 7 4 8 6 5 9 3 1,1 2 9 5 4 6 3 7 8,4 3 6 1 8 7 2 9 5,7 5 8 3 2 9 1 4 6,8 9 2 6 7 1 4 5 3,6 1 5 9 3 4 8 2 7,3 4 7 2 5 8 6 1 9,1 2 3 4 5 6 7 8 9,2 3 4 5 6 7 8 9 1,3 4 5 6 7 8 9 1 2,4 5 6 7 8 9 1 2 3

13、5 6 7 8 9 1 2 3 4,6 7 8 9 1 2 3 4 5,7 8 9 1 2 3 4 5 6,8 9 1 2 3 4 5 6 7,9 1 2 3 4 5 6 7 8,【样例输出】,Right,Wrong,【时间限制】,每个测试点1s,var,a,b,c,map:array1.9,1.9 of longint;,n:longint;,procedure process;,var,i,j,k:longint;,begin,fillchar(a,sizeof(a),0);,fillchar(b,sizeof(b),0);,fillchar(c,sizeof(c),0);,for i:

14、1 to 9 do for j:=1 to 9 do ai,mapi,j:=1;,for i:=1 to 9 do for j:=1 to 9 do bi,mapj,i:=1;,for i:=1 to 9 do for j:=1 to 9 do,if(ai,j1)or(bi,j1)then,begin,writeln(Wrong);,exit;,end;,for i:=1 to 3 do,for j:=1 to 3 do for k:=3*(i-1)+1 to 3*i do ci,mapj,k:=1;,for i:=4 to 6 do,for j:=4 to 6 do for k:=3*(i

15、4)+1 to 3*(i-3)do ci,mapj,k:=1;,for i:=7 to 9 do,for j:=7 to 9 do for k:=3*(i-7)+1 to 3*(i-6)do ci,mapj,k:=1;,for i:=1 to 9 do for j:=1 to 9 do,if ci,j1 then,begin,writeln(Wrong);,exit;,end;,writeln(Right);,end;,procedure init;,var,i,j,k:longint;,begin,readln(n);,for i:=1 to n do,begin,for j:=1 to

16、9 do,begin,for k:=1 to 9 do read(mapj,k);,readln;,end;,process;,readln;,end;,end;,begin,assign(input,sudoku.in);,reset(input);,assign(output,sudoku.out);,rewrite(output);,init;,close(input);,close(output);,end.,枚举法的优点:,由于枚举算法一般是现实生活中问题的“直译”,因此比较直观,易于理解;,由于枚举算法建立在考察大量状态、甚至是穷举所有状态的基础上,所以算法的正确性比较容易证明。,

17、枚举法的缺点,:,枚举算法的效率取决于枚举状态的数量以及单个状态枚举的代价,因此效率比较低。,二、枚举算法的优化,枚举算法的时间复杂度可以用状态总数*考察单个状态的耗时来表示,因此优化主要是,减少状态总数(即减少枚举变量和枚举变量的值域),降低单个状态的考察代价,优化过程从几个方面考虑。具体讲,提取有效信息,减少重复计算,将原问题化为更小的问题,根据问题的性质进行截枝,引进其他算法,例4 邮票面值问题,【问题描述】,邮局发行一套票面有四种不同值的邮票,如果每封信所贴邮票张数不超过三枚,存在整数,使得用不超过三枚的邮票,可以贴出连续的整数、,来,找出这四种面值数,使得值最大。,【算法分析】,设四

18、种邮票的面值分别为:,A,B,C,D,,根据题意设:,A B C x0 then,begin保存最大面值邮票,x0:=x;x1:=a;x2:=b;x3:=c;x4:=d,end,end;,writeln(x1:5,x2:5,x3:5,x4:10,R=,x0);,End.,例 完全平方数,【问题描叙】,用1到9九个阿拉伯数字构成的全排列中,每一种排列也可以看成一个九位数,求出其中是完全平方数的所有排列,并输出总共有多少种这样的排列。,输入数据:无,输出数据:,输出所有的完全平方数,一行一个,最后再输,出总个数。,var,i,j,num,s,total:longint;,used:array0.9

19、 of 0.1;,begin,for i:=11111 to 31427 do,begin,num:=sqr(i);,fillchar(used,sizeof(used),0);,while num0 do,begin,usednum mod 10:=1;,num:=num div 10;,end;,s:=0;,for j:=1 to 9 do inc(s,usedj);,if s=9 then,begin,inc(total);writeln(i*i);,end;,end;,write(total);,end.,例5,阿姆斯特朗数,【问题描述】,编一个程序找出所有的三位数到七位数中的阿姆斯特

20、朗数。阿姆斯特朗数也叫水仙花数,它的定义如下:若一个n位自然数的各位数字的n次方之和等于它本身,则称这个自然数为阿姆斯特朗数。例如153(153=1*1*1+3*3*3+5*5*5)是一个三位数的阿姆斯特朗数,8208则是一个四位数的阿姆斯特朗数。,program amsts;,var,i,j,k,num,m,fac:longint;,a:array1.100 of longint;,begin,assign(output,amsts.out);,rewrite(output);,for i:=100 to 9999999 do 枚举产生3位到7位的数,begin,num:=i;m:=0;m表

21、示位数,while num0 do 分解这个产生的数,begin,m:=m+1;,am:=num mod 10;a数组保存各位上的数字,num:=num div 10;,end;,num:=0;,for j:=1 to m do ,begin,fac:=1;,for k:=1 to m do 表示其中一位的幂,fac:=fac*aj;,num:=num+fac;求各位幂的和,end;,if num=i then writeln(i);,end;,close(output);,end.,例,勾股数,【问题描述】,设三个正整数a、b、c,满足,则称a b c 为一组勾股数。,求所有C=N的勾股数(

22、1000),program l1;勾股数,var n,a,b,c:integer;,function f(a,b:integer):integer;,a2+b2完全平方数判断,var i:integer;,begin,i:=1;,while (a*a+b*bi*i)and(i=n)do inc(i);,if i=n then f:=i else f:=0,end;,【参考程序】,begin,write(n=);readln(n);,for a:=1 to n-2 do,for b:=a+1 to n-1 do,begin,c:=f(a,b);,if c0 then writeln(a,b,c);,end;,readln,end.,

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服