动态规划入门.ppt

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划入门

动态规划入门 攀天梯 动态规划问题中的术语 阶段 状态 决策 动态规划方程 无后效性 最优子结构 * * 桂江一中 刘凤兰 2012年3月21日 北武当山又名真武山,古称龙王山。北武当山主峰四周几乎都是陡壁悬崖,只有一条人造“天梯”可攀,天梯由N级就山凿筑的石阶组成。 现在,聪聪打算通过天梯攀上北武当山主峰。攀天梯时,他有时一步一级石阶,有时一步两级,那么,他攀上这N级的天梯有多少种不同的方法? 输入格式: 输入文件包括一行数据。这一行只包含一个整数N(1<=N<=20)。 输出格式 输出文件包括一行,这一行只包含一个整数,表示聪聪攀上这N级天梯的方法数。 输入样例 5 输出样例 8 var n:integer; ans:longint; procedure find(k:integer); begin if k=n then ans:=ans+1; if k>=n then exit; find(k+1); find(k+2); end; begin readln(n); find(0); write(ans); end. 时间复杂度,2^n, 当n>30,会超时 var a:array[0..100] of int64; i,n:integer; begin readln(n); if n=1 then begin writeln(1);halt;end; if n=2 then begin writeln(2);halt;end; a[1]:=1;a[2]:=2; for i:=3 to n do a[i]:=a[i-1]+a[i-2]; writeln(a[n]); end. 黑熊过河 【问题描述】 晶晶的爸爸给晶晶一道难题:有一只黑熊想过河,但河很宽,黑熊不会游泳,只能借助河面上的石墩跳过去,他可以一次跳一墩,也可以一次跳两墩,但是每跳一次都会耗费一定的能量,黑熊最终可能因能量不够而掉入水中。所幸的事,有些石墩上放了一些食物,这些食物可以给黑熊增加一定的能量,问黑熊能否利用这些石墩安全的抵达对岸,请计算出抵达对岸后剩余能量的最大值。 【输入格式】 第一行包含两个整数P(黑熊的初始能量),Q(黑熊每次起跳时耗费的能量),0≤P,Q≤1000; 第二行只有一个整数n(1≤n≤10^6),即河中石墩的数目; 第三行有n个整数,即每个石墩上食物的能量值ai(0≤ai≤1000)。 【输出格式】 仅一行,若黑熊能抵达对岸,输出抵达对岸后剩余能量的最大值,若不能,则输出“NO”。 【输入样例】 12 5 5 0 5 2 0 7 【输出样例】 6 var p,q,n,i,max:longint; a:array[0..35] of longint; procedure find(k:integer;neng:longint); begin if k>n then begin if neng>max then max:=neng;exit;end; if neng>=q then find(k+1,neng-q+a[k+1]); if neng>=q then find(k+2,neng-q+a[k+2]); end; begin readln(p,q); readln(n); for i:=1 to n do read(a[i]); max:=-maxlongint; find(0,p); if max<0 then writeln('NO') else writeln(max); end. var n,i,p,q,sub:longint; a,f:array[-1..1000002] of longint; begin readln(p,q); readln(n); for i:=1 to n do read(a[i]); f[0]:=p; for i:=1 to n+1 do begin sub:=max(f[i-1],f[i-2]); if sub>=q then f[i]:=sub-q+a[i] else begin writeln('NO'); halt; end; end; writeln(f[n+1]); end. *

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档