下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
历届NOIP搜索算法全集转自:oifans用动态规划来解背包问题在历届NOIP竞赛中,有4道初赛题和5道复赛题均涉及到背包问题,所谓的背包问题,可以描述如下:一个小偷打劫一个保险箱,发现柜子里有N类不同大小与价值的物品,但小偷只有一个容积为M的背包来装东西,背包问题就是要找出一个小偷选择所偷物品的组合,以使偷走的物品总价值最大。如有4件物品,容积分别为:3458对应的价值分别为:45710小偷背包的载重量为:12则取编号为123的物品,得到最大价值为16。算法分析:如果采用贪心法,则先取价值最大的10,消耗了容积8,下面只能取容积为4的物品,得到价值5,这样总价值是15,这不是最优解,因此贪心法是不正确的。采用穷举法,用一个B数组来表示取数的标记,当B=0时表示第i件物品不取,当B=1时表示第i件物品已取,初始化全部取0,以下算法是从后面的物品开始取起,通过B数组的取值把15种取法全部穷举出来,价值MAX初始化为0。B[0]B[1]B[2]B[3]B[4]00000{初始化}00001{取第4件物品,容积为8,不超,价值为10,将MAX替换为10}00010{取物品3,容积为5,不超,价值为7,不换}00011{取物品3、4,容积为13,超}00100{取物品2,容积为4,不超,价值为5,不换}001010011000111……01110{这是最佳方案}0111110000{当B〔0〕=1时停止,B〔0〕称为哨兵}生成B数组中数据的方法如下:fillchar(b,sizeof(b),0);whileb[0]=0dobeginj:=n;whileb[j]=1dodec(j);b[j]:=1;fori:=j+1tondob:=0;end;小结:以上每件物品只能取1件,所以取法只有0和1两种情况,我们称之为0、1背包,算法的时间复杂度为O(2N),在1秒内N只能做到20。例1:选数(NOIP2002初中组复赛第2题)[问题描述]:已知n个整数x1,x2,…,xn,以及一个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,19时,
可得全部的组合与它们的和为:3+7+12=223+7+19=297+12+19=383+12+19=34。现在,要求你计算出和为素数共有多少种。例如上例,只有一种的和为素数:3+7+19=29。[输入]:键盘输入,格式为:n,k(1<=n<=20,k<n)x1,x2,…,xn(1<=xi<=5000000)n[输出]:屏幕输出,格式为:一个整数(满足条件的种数)。[输入输出样例]:输入:43371219输出:1[算法分析]:本题应用背包问题中取数的方法进行穷举,在取数的过程中,当B数组中有K个1的时候将对应的K个数相加,再判断是不是素数。主要程序段如下:readln(n,k);sum:=0;fori:=1tondoread(a);fillchar(b,sizeof(b),0);whileb[0]=0dobeginj:=n;whileb[j]=1dodec(j);b[j]:=1;fori:=j+1tondob:=0;m:=0;fori:=1tondoifb=1thenm:=m+1;{统计1的个数}ifm=kthenbegin计算此种取数方法得到的和S;ifS是素数thensum:=sum+1;end;end;例2:采药(NOIP2005初中组复赛第3题)【问题描述】辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是辰辰,你能完成这个任务吗?一个到处都
【输入文件】输入文件medic.in的第一行有两个整数T(1<=T<=1000)和M(1<=M<=100),用一T代表总共能够用来采药的时间,M代表山洞里的草药的数目在1到100之间(包括1和100)的整数,和这株草药的价值。个空格隔开,。接下来的M行每行包括两个分别表示采摘某株草药的时间【输出文件】输出文件medic.out包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。【样例输入】7037110069112【样例输出】3【数据规模】对于30%的数M<=100。【算法分析】拿30%的分数,据,M<=10;对于全部的数据,本题如果采用上述方法来解,只能将M算到20,而这里M〈=100,所以只能比较好的算法是采用动态规划,为了能说清算法,现重新举一个例子,若输入:103344556表示背包的容量是10,有3种物品。用一个数组用来表示背包容量与其最大价值的关系,组count,用下标表示容量,初始化为0。然后按物品的顺序一一来统计此每种药品对应各种背包容量时得到的i件物品,背包容量为j时的最大价值Cmax(j)=MAX(Cmaxj,Pi+余下空间的最大价值Cmax(j-i物品所占的空间)),如上例中,根据物品的不断增加,各容量背包得到的最大价上例中设置一个数时的最大价值,最大价值为:对于是第值不断替换:容量12345678910价值序号0000000000100444444442004555999930045669101111[数据结构]time,price数组分别用来存入时间和价值,count来存入背包的价值。vartime,price:array[1..100]oflongint;t:longint;i,m,j:integer;
count:array[0..1000]oflongint;beginassign(input,'medic.in');assign(output,'medic.out');reset(input);rewrite(output);readln(t,m);fori:=1tomdoreadln(time,price);fillchar(count,sizeof(count),0);fori:=1tomdoforj:=tdownto1dobeginif(j>=time)and(price+count[j-time]>count[j])thencount[j]:=price+count[j-time];end;{j>=time表示当前的容量能放入背包,price+count[j-time]>count[j]表示第i件物品的价i件物品对于背包容量为j时余下空间的最大价值大于当前背包容量为j时的最大值加上第价值}writeln(count[t]);close(input);close(output);end.例3:开心的金明(NOIP2006初中组复赛
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 掌声 微课教育课件
- 七下历史 教育课件
- 2024版长期房屋租赁合同(商业用途)2篇
- 2024年度礼品定制生产及供应合同2篇
- 供应链金融合作协议范本
- 买房押金合同协议书范本
- 2024年度二人合伙经营咖啡厅合同2篇
- 2024年度版权质押合同:某音乐公司与某金融机构关于音乐版权质押融资
- 咏柳 音乐课件
- 2024年度知识产权许可合同许可范围和许可条件具体规定
- 2023年学年上海外国语大学附属外国语学校东校教师招聘考试真题
- 2024年新版七年级上册道德与法治11.1 探问人生目标 课件
- 2024年网络安全知识竞赛考试题库500题(含答案)
- 2024年湖北襄阳四中五中自主招生英语试卷真题(含答案详解)
- 施工现场临时用电安全监理检查表
- 不符合慢病证办理告知书
- GB/T 44230-2024政务信息系统基本要求
- 《数字媒体技术导论》全套教学课件
- 海南乐东黎族自治县事业单位定向公开招聘驻县部队随军家属工作人员5人(第1号)(高频重点复习提升训练)共500题附带答案详解
- GB/T 44257.1-2024电动土方机械用动力电池第1部分:安全要求
- 广东省深圳市宝安区2023-2024学年七年级下学期期末数学试题(无答案)
评论
0/150
提交评论