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

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/5916638.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。

注意事项

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

动态规划练习题及解答1.doc

1、动态规划练习题   [题1] 多米诺骨牌(DOMINO) 问题描述:有一种多米诺骨牌是平面的,其正面被分成上下两部分,每一部分的表面或者为空,或者被标上1至6个点。现有一行排列在桌面上: 顶行骨牌的点数之和为6+1+1+1=9;底行骨牌点数之和为1+5+3+2=11。顶行和底行的差值是2。这个差值是两行点数之和的差的绝对值。每个多米诺骨牌都可以上下倒置转换,即上部变为下部,下部变为上部。 现在的任务是,以最少的翻转次数,使得顶行和底行之间的差值最小。对于上面这个例子,我们只需翻转最后一个骨牌,就可以使得顶行和底行的差值为0,所以例子的答案为1。 输入格式: 文件的第一行是一个整

2、数n(1〈=n〈=1000〉,表示有n个多米诺骨牌在桌面上排成一行。接下来共有n行,每行包含两个整数a、b(0〈=a、b〈=6,中间用空格分开〉。第I+1行的a、b分别表示第I个多米诺骨牌的上部与下部的点数(0表示空)。 输出格式: 只有一个整数在文件的第一行。这个整数表示翻动骨牌的最少次数,从而使得顶行和底行的差值最小。   [题2] Perform巡回演出 题目描述: Flute市的Phlharmoniker乐团2000年准备到Harp市做一次大型演出,本着普及古典音乐的目的,乐团指挥L.Y.M准备在到达Harp市之前先在周围一些小城市作一段时间的巡回演出,此后的几天

3、里,音乐家们将每天搭乘一个航班从一个城市飞到另一个城市,最后才到达目的地Harp市(乐团可多次在同一城市演出). 由于航线的费用和班次每天都在变,城市和城市之间都有一份循环的航班表,每一时间,每一方向,航班表循环的周期都可能不同.现要求寻找一张花费费用最小的演出表. 输入: 输入文件包括若干个场景.每个场景的描述由一对整数n(2<=n<=10)和k(1<=k<=1000)开始,音乐家们要在这n个城市作巡回演出,城市用1..n标号,其中1是起点Flute市,n是终点Harp市,接下来有n*(n-1)份航班表,一份航班表一行,描述每对城市之间的航线和价格,第一组n-1份航班表对应从城

4、市1到其他城市(2,3,...n)的航班,接下的n-1行是从城市2到其他城市(1,3,4...n)的航班,如此下去. 每份航班又一个整数d(1<=d<=30)开始,表示航班表循环的周期,接下来的d个非负整数表示1,2...d天对应的两个城市的航班的价格,价格为零表示那天两个城市之间没有航班.例如"3 75 0 80"表示第一天机票价格是75KOI,第二天没有航班,第三天的机票是80KOI,然后循环:第四天又是75KOI,第五天没有航班,如此循环.输入文件由n=k=0的场景结束. 输出: 对每个场景如果乐团可能从城市1出发,每天都要飞往另一个城市,最后(经过k天)抵达城市n,则

5、输出这k个航班价格之和的最小值.如果不可能存在这样的巡回演出路线,输出0. 样例输入: 样例输出: 3 6 460 2 130 150 0 3 75 0 80 7 120 110 0 100 110 120 0 4 60 70 60 50 3 0 135 140 2 70 80 2 3 2 0 70 1 80 0 0   [题3] 复制书稿(BOOKS) 问题描述:假设有M

6、本书(编号为1,2,…M),想将每本复制一份,M本书的页数可能不同(分别是P1,P2,…PM)。任务时将这M本书分给K个抄写员(K〈=M〉,每本书只能分配给一个抄写员进行复制,而每个抄写员所分配到的书必须是连续顺序的。 意思是说,存在一个连续升序数列0=bo〈b1〈b2〈…

7、 输入格式: 文件的第一行是两个整数m和k (1〈=k〈=m〈=500)。 第二行有m个整数P1,P2,…,Pm,这m个整数均为正整数且都不超过1000000。每两个整数之间用空格分开。 输出格式: 文件有k行,每行有两个正整数。整数之间用空格分开。 第I行的两个整数ai和bi,表示第I号抄写员所分配得到的书稿的起始编号与终止编号。 动态规划题参考程序: 题1: 解决问题:例子的上下部分之差是6+1+1+1-(1+5+3+2)=(6-1)+(1-5)+(1-3)+(1-2)=-2,而翻转最后一个骨牌后,上下之差

8、变为(6-1)+(1-5)+(1-3)+(2-1)=0。由此看出,一个骨牌对翻转策略造成影响的是上下两数之差,骨牌上的数则是次要的了。这么一来,便把骨牌的放置状态由8个数字变为4个: 5 -4 -2 -1,翻转时只需取该位数字的相反数就行了。 在本题中,因为各骨牌的翻转顺序没有限定,所以不能按骨牌编号作为阶段来划分。怎么办呢?考虑到隐含阶段类型的问题可以按状态最优值的大小来划分阶段。于是,我们以骨牌序列上下两部分的差值I作为状态,把达到这一状态的翻转步数作为状态值,记为f(I)。便有f(I)=min{f(I+j)+1} (-12〈=j<=12,j为偶数,且要求当前状态有差值

9、为j/2的骨牌)。这里,I不是无限增大或减小,其范围取决于初始骨牌序列的数字差的和的大小。 具体动态规划时,如例题,我们以f(-2)=0起步,根据骨牌状态,进行一次翻转,可得到f(-12)=1,f(6)=1,f(2)=1,f(0)=1,由于出现了f(0),因此程序便可以结束,否则将根据四个新状态继续扩展,直至出现f(0)或者无法生成新状态为止。 注意:在各状态,除记录最少步数外,还需记录到达这一状态时各骨牌的放置情况;而当到达某一状态发现已记录有一种翻转策略时,则取步数较小的一种。 程序如下: program domino; type tp=array[1..6] of intege

10、r; var t:array[1..6000] of ^tp; {记录骨牌摆放状态} f:array[-6000..6000] of integer; {记录达到某个差值的最少步数} l:array[1..6000] of integer; {扩展队列} tt:tp; i,j,n,m,x,y,ft,re:integer; f1,f2:text; procedure init; {程序初始化} begin assign(f1,'domino.dat'); reset(f1); assign(f2,'domino.out');

11、 rewrite(f2); m:=0; ft:=0;re:=1;new(t[1]); fillchar(t[1]^,sizeof(t[1]^),0); fillchar(f,sizeof(f),0); fillchar(tt,sizeof(tt),0); readln(f1,n); for i:=1 to n do begin readln(f1,x,y); if x<>y then begin x:=x-y; inc(m,x); inc(tt[abs(x)]);

12、 if x>0 then inc(t[1]^[x]); end; end; if m=0 then begin writeln(f2,0); close(f2); halt; end; {处理步数为零的情况} l[1]:=m; f[m]:=1; end; procedure main; {主过程} begin repeat for ft:=ft+1 to re do {以步数为阶段扩展状态} begin x:=l[ft]; for i:=1 to 6 do

13、 {不同差值的六种情况} begin if x<6 then if (t[ft]^[i]

14、f2); halt; end; new(t[re]); t[re]^:=t[ft]^; inc(t[re]^[i]); end; {差值增加} if x>-6 then if (t[ft]^[i]>0)and(f[x-i*2]=0) then begin inc(re);l[re]:=x-i*2; f[l[re]]:=f[x]+1;

15、 if l[re]=0 then {找到解便打印} begin writeln(f2,f[l[re]]-1); close(f2); halt; end; new(t[re]); t[re]^:=t[ft]^; dec(t[re]^[i]); end; {差值减少} end; end; until ft=re;

16、 for i:=1 to 6 do if (f[i]>0)or(f[-i]>0) then begin if (f[-i]>0)and((f[i]=0)or(f[-i]

17、与第x-1天有关,符合动态规划的无后效性原则,即只与上一个状态相关联,而某一天x航班价格不难求出S=C[(x-1) mod m +1].我们用天数和地点来规划用一个数组A[1..1000,1..10]来存储,A[i,j]表示第i天到达第j个城市的最优值,C[i,j,l]表示i城市与j城市间第l天航班价格,则A[i,j]=Min{A[i-1,l]+C[l,j,i] (l=1..n且C[l,j,i]<>0)},动态规划方程一出,尽可以放怀大笑了. 示范程序: program perform_hh; var f,fout:text; p,l,i,j,n,k:integer;

18、a:array [1..1000,1..10] of integer; {动态规划数组} c:array [1..10,1..10] of record {航班价格数组} num:integer; t:array [1..30] of integer; end; e:array [1..1000] of integer; procedure work; begin {人工赋第一天各城市最优值}

19、 for i:=1 to n do begin if c[1,i].t[1]<>0 then a[1,i]:=c[1,i].t[1]; end; for i:=2 to k do begin for j:=1 to n do begin for l:=1 to n do begin if (j<>l) and (c[l,j].t[(i-1) mod c[l,j].num+1]<>0) {判断存在航班} and ((a[i,j]=0) or (a[i-1,l]+c[l,j].t[(i-1

20、) mod c[l,j].num+1]

21、n,k); p:=0; while (n<>0) and (k<>0) do begin p:=p+1; fillchar(c,sizeof(c),0); fillchar(a,sizeof(a),0); for i:=1 to n do begin for j:=1 to i-1 do begin read(f,c[i,j].num); for l:=1 to c[i,j].num do read(f,c[i,j].t[l]); end; for

22、j:=i+1 to n do begin read(f,c[i,j].num); for l:=1 to c[i,j].num do read(f,c[i,j].t[l]); end; end; work; readln(f,n,k); end; {输出各个场景的解} for i:=1 to p-1 do writeln(fout,e[i]); write(fout,e[p]); close(f); close(fout); end; begin readfile

23、 end. [题3:] 解决问题:该题中M本书是顺序排列的,K个抄写员选择数也是顺序且连续的。不管以书的编号,还是以抄写员标号作为参变量划分阶段,都符合策略的最优化原理和无后效性。考虑到K〈=M,以抄写员编号来划分会方便些。 设F(I,J)为前I个抄写员复制前J本书的最小“页数最大数”。于是便有F(I,J)=MIN{ F(I-1,V),T(V+1,J)} (1〈=I〈=K,I〈=J〈=M-K+I,I-1〈=V〈=J-1〉。 其中T(V+1,J)表示从第V+1本书到第J本书的页数和。起步时F(1,1)=P1。 观察函数递推式,发现F(I)阶段只依赖于F(I-1)阶段的状态值,编程时可

24、令数组F的范围为(0…1,1…M),便于缩小空间复杂度。 程序如下:   program books; type tp=array[1..500] of integer; tc=array[1..500] of longint; var c:array[1..500] of ^tp; {记录路径} f:array[0..1] of tc; {状态值} t:tc; {书本页数和} cc:tp; {链接路径} i,j,v,k,m,x,y,min,p1,p2:longint; f1,f2:text; procedure init;

25、 {输入部分} begin assign(f1,'books.dat'); reset(f1); assign(f2,'books.out'); rewrite(f2); readln(f1,m,k); if k=1 then begin writeln(f2,1,' ',m); close(f2); halt; end; {当k=1时,作特殊处理} for i:=1 to m do begin read(f1,j); if i=1 then t[1]:=j else

26、 t[i]:=t[i-1]+j; {累加页数} end; for i:=1 to k do new(c[i]); end; procedure main; {主过程} begin p1:=1;f[1]:=t; {起步状态} for i:=2 to k-1 do {利用函数递推式计算} begin p2:=p1;p1:=1-p2; for j:=i to m-k+i do begin min:=maxlongint;y:=0; for v:=i-1 to j-1

27、do begin if f[p2,v]>t[j]-t[v] then x:=f[p2,v] else x:=t[j]-t[v]; if xt[m]-t[i

28、] then x:=f[p2,i] else x:=t[m]-t[i]; if x

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

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

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

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

gongan.png浙公网安备33021202000488号   

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

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

客服