- 1、本文档共142页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态规划 第一节 动态规划的基本模型 多阶段决策过程的最优化问题 动态规划的基本概念和基本模型构成 最优化原理与无后效性 动态规划设计方法的一般模式 第二节 动态规划与递推 ——动态规划是最优化算法 第三节 历届NOIP动态规划试题 第四节 背包问题 【上机练习】 第五节 动态规划应用举例 【输出格式】 答案输出到当前目录下的文本文件“CATCHER.OUT”中,该文件第一行是一个整数max,表示最多能截击的进攻导弹数,以下的max行每行各有一个整数,表示各个被截击的进攻导弹的编号(按被截击的先后顺序排列)。输出的答案可能不唯一,只要输出其中任一解即可。 【输入输出样例】 ? ? 23 3 ? 36 1 ? 25 2 ? 3 输出文件:CATCHER.OUT ? 输入文件:CATCHER.IN 【算法分析】 归根结底就是求一整串数中的最长不上升序列,用2个一维数组b[1..max]和c[1..max]来建立动态规划状态转移方程(注: b[1..max]表示当前状态最多可击落的导弹数,c[1..max]表示当前状态的后继标志):b[i]=Max{b[j]+1,(j=i+1..n)},然后程序也就不难实现了。 【参考程序】 program catcher; var a,b,c:array[1..10000] of longint; i,j,k,n,max:longint; begin assign(input,catcher.in); reset(input); assign(output,catcher.out);rewrite(output); fillchar(c,sizeof(c),0); read(n); for i:=1 to n do begin read(a[i]); b[i]:=1;end; for i:=n-1 downto 1 do begin k:=0; for j:=i+1 to n do if (a[i]=a[j])and (b[j]+1b[i]) then begin b[i]:=b[j]+1;k:=j; end; c[i]:=k; end; max:=0;k:=0; 本程序段也可如下: for i:=n-1 downto 1 do begin max:=0; k:=0; for j:=i+1 to n do if (a[i]=a[j]) and (b[j]max) then begin max:=b[j]; k:=j; end; b[i]:=max+1; c[i]:=k; end; for i:=1 to n do //计算最多能截击的进攻导弹数 if b[i]max then begin max:=b[i]; k:=i; end; writeln(max); //输出最多能截击的进攻导弹数 writeln(k); while c[k]0 do //输出各个被截击的进攻导弹的编号 begin k:=c[k];writeln(k); end; close(input);close(output); end. 【例2】拔河比赛(tug.pas) 【问题描述】 一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过1,且两个组内的所有人体重加起来尽可能地接近。 【输入格式】 输入数据的第1行是一个n,表示参加拔河比赛的总人数,n=100,接下来的n行表示第1到第n个人的体重,每个人的体重都是整数(1=weight=450)。 【输出格式】 输出数据应该包含两个整数:分别是两个组的所有人的体重和,用一个空格隔开。注意如果这两个数不相等,则请把小的放在前面输出。 【输入样例】tug.in 3 100 90 200 【输出样例】tug.out 190 200 【算法分析】 这道题目不满足动态规划最优子结构的特性。因为最优子结构要求一个问题的最优解只取决于其子问题的最优解。就这道题目而言,当前n-1个人的分组方案达到最优时,
文档评论(0)