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

加入VIP,免费下载
 

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

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

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(动态规划题目及其代码.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

动态规划题目及其代码.docx

1、动态规划题目及其代码动态规划题目及其代码 By LYLtim1、数塔问题(tower.pas)设有一个三角形的数塔,如下图所示。顶点结点称为根结点,每个结点有一个整数数值。从顶点出发,在每一结点可以选择向左走或是向右走,一起走到底层,要求找出一条路径,使路径上的值最大。【样例输入】tower.in5 数塔层数1311 812 7 266 14 15 812 7 13 24 11【样例输出】tower.outmax=86【参考程序】uses math;var n,i,j:byte; a:array1.10,1.10of word; f:array1.10,1.10of word;begin as

2、sign(input,tower.in);reset(input); assign(output,tower.out);rewrite(output); readln(n); for i:=1 to n do begin for j:=1 to i do read(ai,j); readln; end; fillchar(f,sizeof(f),0); for i:=1 to n do fn,i:=an,i; for i:=n-1 downto 1 do for j:=1 to i do fi,j:=max(fi+1,j,fi+1,j+1)+ai,j; writeln(max=,f1,1);

3、close(input);close(output);end.2、拦截导弹(missile.pas) 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。【样例输入】 missile.in 389 207 155 300 29

4、9 170 158 65 【输出样例】missile.out6(最多能拦截的导弹数)2(要拦截所有导弹最少要配备的系统数)【参考程序】type node=record h,lens:word;end;var n,i,j,maxl,num,minsys:word; mis:arraywordof node; sysl:arraywordof word;begin assign(input,missile.in);reset(input); assign(output,missile.out);rewrite(output); while not eoln do begin inc(n); rea

5、d(misn.h); misn.lens:=1; end; for i:=2 to n do beginfor j:=1 to i-1 do if(misj.hmisi.h)and(misj.lens+1misi.lens) thenmisi.lens:=misj.lens+1;if misi.lensmaxl then maxl:=misi.lens; end; writeln(maxl); num:=1; sysl0:=maxint; sysl1:=mis1.h; for i:=2 to n do begin minsys:=0;for j:=1 to num doif(syslj=mis

6、i.h)and(syslj0)and(aj.dismaxint)and(aj.dis+mapi,jai.dis)then while ai do begin dis:=aj.dis+mapi,j; pre:=j; end; writeln(dis=,a1.dis); x:=1; while ax.pre0 do begin write(x, ); x:=ax.pre; end; writeln(x); close(output);end.4、挖地雷(Mine.pas)在一个地图上有N个地窖(N=200),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径,并规定路径都是单向的。某人可以

7、从任一处开始挖地雷,然后沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使他能挖到最多的地雷。【输入格式】N 地窖的个数W1,W2,WN 每个地窖中的地雷数X1,Y1 表示从X1可到Y1X2,Y20 ,0 表示输入结束【输出格式】K1K2Kv 挖地雷的顺序MAX 最多挖出的地雷数【输入样例】Mine.in65 10 20 5 4 51 21 42 43 44 54 65 60 0【输出样例】Mine.out3-4-5-634【参考程序】var n,start:byte; w:array1.200of word; g:array1.200,1.200of

8、 boolean; f:array1.200of longword; next:array1.200of byte; max:longword;procedure init;var i,x,y:byte;begin assign(input,mine.in);reset(input); readln(n); for i:=1 to n do read(wi); readln; readln(x,y); fillchar(g,sizeof(g),false); while(x0)and(y0)do begin gx,y:=true; readln(x,y); end; close(input);

9、end;initprocedure work;var i,j:byte;begin fillchar(f,sizeof(f),0); fn:=wn; fillchar(next,sizeof(next),0); for i:=n-1 downto 1 do begin for j:=i+1 to n do if(gi,j)and(fjfi)then begin fi:=fj; nexti:=j; end; inc(fi,wi); end; max:=0; for i:=1 to n do if fimax then begin max:=fi; start:=i; end;end;workpr

10、ocedure print;begin assign(output,mine.out);rewrite(output); write(start); while nextstart0 do begin write(-,nextstart); start:=nextstart; end; writeln; writeln(max); close(output);end;printbeginmain init; work; print;end.5、轮船问题(ship.pas)【问题描述】某国家被一条河划分为南北两部分,在南岸和北岸总共有N对城市,每一城市在对岸都有唯一的友好城市,任何两个城市都没有

11、相同的友好城市。每一对友好城市都希望有一条航线来往,于是他们向政府提出了申请。由于河终年有雾。政府决定允许开通的航线就互不交叉(如果两条航线交叉,将有很大机会撞船)。兴建哪些航线以使在安全条件下有最多航线可以被开通。 【输入格式】输入文件(ship.in):包括了若干组数据,每组数据格式如下: 第一行两个由空格分隔的整数x,y,10=x=6000,10=y=100。x表示河的长度而y表示宽。第二行是一个整数N(1=N1.c; repeat while apl.cm do dec(pr); if plpr; if pll then qsort(l,pr);end;qsortprocedure w

12、ork;var i,j:word;begin for i:=2 to n do begin for j:=1 to i-1 do if(aj.dai.l)then ai.l:=aj.l+1; if ai.lmaxl then maxl:=ai.l; end;end;workprocedure print;begin assign(output,ship.out);rewrite(output); writeln(maxl); close(output);end;printbeginmain init; qsort(1,n); work; print;end.7、砝码称重(weight.pas)

13、设有1g,2g,3g,5g,10g,20g的砝码各若干枚(其总重1000g),要求:【输入格式】a1 a2 a3 a4 a5 a6(表示1g砝码有a1个,2g砝码有a2个,.20g砝码有a6个)【输出格式】Total=N (N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)【输入样例】weight.in1 1 0 0 0 0【输出样例】weight.outTotal=3,表示可以称出1g,2g,3g三种不同的重量【参考程序】const wt:array1.6of shortint=(1,2,3,5,10,20);var n:array1.6of word; vis:arra

14、y0.1000of boolean; w:array0.1000of word; i,j,k,nw:word;begin assign(input,weight.in);reset(input); assign(output,weight.out);rewrite(output); fillchar(vis,sizeof(vis),false); for i:=1 to 6 do read(ni); w0:=1;w1:=0; for i:=1 to 6 do for j:=1 to w0 do for k:=1 to ni do begin nw:=wj+wti*k; if not visnw

15、 then begin visnw:=true; inc(w0); ww0:=nw; end; end; writeln(Total=,w0-1); close(input);close(output);end.8、装箱问题(boxes.pas)有一个箱子容量为v(正整数,0v20000),同时有n个物品(0n30),每个物品有一个体积(正整数)。要求从n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。【输入格式】箱子的容量v 物品数n接下来n行,分别表示这n个物品的体积【输出格式】 箱子剩余空间【输入样例】boxes.in2468312797【输出样例】boxes.out0 【参考程序

16、】var v,j,cost:word; n,i:byte; c:array1.30of word; f:array0.20000of boolean;begin assign(input,boxes.in);reset(input); assign(output,boxes.out);rewrite(output); readln(v); readln(n); for i:=1 to n do readln(ci); close(input); fillchar(f,sizeof(f),false); f0:=true; for i:=1 to n do for j:=v downto ci

17、do if fj-ci then fj:=true; cost:=v; while not fcost do dec(cost); writeln(v-cost); close(output);end.9、合唱队形(Chorus.pas)N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, , K,他们的身高分别为T1, T2, , TK,则他们的身高满足T1 T2 Ti+1 TK (1iK)。已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。【输入文件】输入

18、文件chorus.in的第一行是一个整数N(2 N 100),表示同学的总数。第二行有n个整数,用空格分隔,第i个整数Ti(130 Ti 230)是第i位同学的身高(厘米)。【输出文件】输出文件chorus.out包括一行,这一行只包含一个整数,就是最少需要几位同学出列。【样例输入】chorus.in8186 186 150 200 160 130 197 220【样例输出】chorus.out4【参考程序】type node=record h,ups,downs:byte; end;var n,i,j,max:byte; stu:array1.100of node;begin assign(

19、input,chorus.in);reset(input); assign(output,chorus.out);rewrite(output); readln(n); for i:=1 to n do begin stui.ups:=1;stui.downs:=1; read(stui.h); end; close(input); for i:=2 to n do for j:=1 to i-1 doif(stuj.hstui.ups)thenstui.ups:=stuj.ups+1; for i:=n-1 downto 1 do for j:=i+1 to n doif(stuj.hstui.downs) then stui.downs:=stuj.downs+1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1