1、动态规划入门,桂江一中 刘凤兰,2012年3月21日,攀天梯,北武当山又名真武山,古称龙王山。北武当山主峰四周几乎都是陡壁悬崖,只有一条人造“天梯”可攀,天梯由N级就山凿筑的石阶组成。 现在,聪聪打算通过天梯攀上北武当山主峰。攀天梯时,他有时一步一级石阶,有时一步两级,那么,他攀上这N级的天梯有多少种不同的方法? 输入格式:输入文件包括一行数据。这一行只包含一个整数N(1=N=20)。 输出格式输出文件包括一行,这一行只包含一个整数,表示聪聪攀上这N级天梯的方法数。 输入样例 5 输出样例 8,var n:integer;ans:longint; procedure find(k:intege
2、r); beginif k=n then ans:=ans+1;if k=n then exit;find(k+1);find(k+2); end; beginreadln(n);find(0);write(ans); end.,时间复杂度,2n, 当n30,会超时,vara:array0100 of int64;i,n:integer; beginreadln(n);if n=1 then begin writeln(1);halt;end;if n=2 then begin writeln(2);halt;end;a1:=1;a2:=2;for i:=3 to n doai:=ai-1+a
3、i-2;writeln(an); end.,黑熊过河,【问题描述】晶晶的爸爸给晶晶一道难题:有一只黑熊想过河,但河很宽,黑熊不会游泳,只能借助河面上的石墩跳过去,他可以一次跳一墩,也可以一次跳两墩,但是每跳一次都会耗费一定的能量,黑熊最终可能因能量不够而掉入水中。所幸的事,有些石墩上放了一些食物,这些食物可以给黑熊增加一定的能量,问黑熊能否利用这些石墩安全的抵达对岸,请计算出抵达对岸后剩余能量的最大值。 【输入格式】 第一行包含两个整数P(黑熊的初始能量),Q(黑熊每次起跳时耗费的能量),0P,Q1000;第二行只有一个整数n(1n106),即河中石墩的数目;第三行有n个整数,即每个石墩上食物
4、的能量值ai(0ai1000)。 【输出格式】仅一行,若黑熊能抵达对岸,输出抵达对岸后剩余能量的最大值,若不能,则输出“NO”。 【输入样例】 12 5 5 0 5 2 0 7 【输出样例】 6,var p,q,n,i,max:longint;a:array035 of longint; procedure find(k:integer;neng:longint); beginif kn then begin if nengmax then max:=neng;exit;end;if neng=q then find(k+1,neng-q+ak+1);if neng=q then find(k
5、+2,neng-q+ak+2); end; beginreadln(p,q);readln(n);for i:=1 to n do read(ai);max:=-maxlongint;find(0,p);if max0 then writeln(NO) else writeln(max); end.,var n,i,p,q,sub:longint;a,f:array-11000002 of longint; beginreadln(p,q); readln(n);for i:=1 to n do read(ai);f0:=p;for i:=1 to n+1 dobeginsub:=max(fi
6、-1,fi-2); if sub=q then fi:=sub-q+ai else begin writeln(NO); halt; end;end;writeln(fn+1); end.,动态规划问题中的术语,阶段 状态 决策 动态规划方程 无后效性 最优子结构,设计一个标准的动态规划算法,通常可按以下几个步骤进行: 1、划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。注意这若干个阶段一定要是有序的或者是可排序的(即无后向性),否则问题就无法用动态规划求解。 2、选择状态:将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。3、确定决策并写出状态转移方程:之所以把这两步放在一起,是因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。所以,如果我们确定了决策,状态转移方程也就写出来了。但事实上,我们常常是反过来做,根据相邻两段的各状态之间的关系来确定决策。 4、写出规划方程(包括边界条件):动态规划的基本方程是规划方程的通用形式化表达式。,