程序设计方法——动态规划法x

程序设计方法——动态规划法x

ID:38552750

大小:364.73 KB

页数:70页

时间:2019-06-14

程序设计方法——动态规划法x_第1页
程序设计方法——动态规划法x_第2页
程序设计方法——动态规划法x_第3页
程序设计方法——动态规划法x_第4页
程序设计方法——动态规划法x_第5页
资源描述:

《程序设计方法——动态规划法x》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《程序设计实践》程序设计方法之动态规划任务:摘桃子(1104)长满桃子的树很大,共有n层(最高层为第1层),第i层有i条树枝,树的形状呈一个三角形(如图)图中的点表示树枝,每个点上方的数字表示这条树枝最多能摘到的桃子数在摘得某枝条的桃子之后,小猴子只能选择往左上方爬或者是往右上方爬例如:摘了有6个桃子的树枝之后只能摘有2个桃子的树枝或是有3个桃子的树枝),然后继续摘桃子。小猴子现在想要从最低层开始一直爬到树顶(也就是最上面的那个枝条),摘尽可能多的桃子。请你编程帮他解决这个问题。123465解题思路题目似曾相识??滑雪、迷宫…可以用递归回溯方法解决建议自写递归回溯

2、的代码换一种思路从最低一层爬到最顶点,经过的路径上数字之和最大A:1B:2C:3D:4E:6F:5第1阶段第2阶段第0阶段思路先看第2阶段,到达顶点有2条路BA,可以摘到1个桃子,则经过B点到顶点最多摘得桃子数是:到达B点手中最多的桃子数+1CA,可以摘到1个桃子,则经过C点到顶点最多摘得桃子数是:到达C点手中最多的桃子数+1从上述两条路径中选择一条最优的令令P(X)表示从底层到X点可以摘到最多桃子数目,包含X点可以摘到的桃子数目则:P(A)=max{P(B),P(C)}+1思路(续)而第1阶段的P(B)=max{P(D),P(E)}+2P(C)=max{P(

3、E),P(F)}+3按照题意,P(D),P(E),P(F)分别初始化为4,6,5上述递推公式说明,要求P(A)需要先求出阶段1的P(B)和P(C),而要得到P(B)和P(C),需要知道P(D),P(E),P(F)思路(续)显然,根据前面的递推过程求解,需要倒过来,从P(D),P(E),P(F)出发,先求出第1阶段的P(B)和P(C),最后得到P(A)。数据结构将长满桃子的树用二维数组保存数组行上存放桃树上一层中每个树枝上桃子数将节点上桃子数目存放在数组中只使用数组中对角线及下部分A:1B:2C:9D:7E:6F:5G:2H:3J:4I:61297652364问题分

4、析从二维数组最下面一行开始向上一行沿图中的直线前进,走到左上角的格子停止。行走路径上经过的格子中的数字之和是猴子爬到树顶能拿到桃子的数目,我们定义为路径长度。原问题转化为求所有路径中路径长度的最大值。1297652364问题分析(续)按照前面的思路,最长路径的长度是:P(A)=max{P(B),P(C)}+1P(B)=max{P(D),P(E)}+2P(C)=max{P(E),P(F)}+9P(D)=max{P(G),P(H)}+7P(E)=max{P(H),P(I)}+6P(F)=max{P(I),P(J)}+5P(G)=2,P(H)=3,P(I)=6,P(J)

5、=4将底层到每个点的最长路径P也存放在二维数组中1297652364ABCDEFGHJIyx数据结构(续)#defineMAXLAYER3intpeachtree[MAXLAYER][MAXLAYER]={{1,-1,-1,-1},{2,9,-1,-1},{7,6,5,-1},{2,3,6,4}};intP[MAXLAYER][MAXLAYER]原问题转化为即求P[0][3]P[x][y]=max{P[x][y-1],P[x+1][y-1]}+peachtree[x][y]y>0,x+y<=MAXLAYPER注意边界条件,P[x][0]=peachtree[x][

6、0]最多能摘到22个桃子,路径如上图红色箭头所示1297652364yx参考程序如下#include#include#includeusingnamespacestd;#defineMAXLAYER110intmaxnum(intx,inty)//返回2个整数中的大者{if(x>y)returnx;elsereturny;}参考程序(续)intmain(){intpeachtree[MAXLAYER][MAXLAYER];intP[MAXLAYER][MAXLAYER];inti,j,k,n;//读入数据c

7、in>>n;k=1;//当前这层的节点数目for(i=0;i>peachtree[j][n-i-1];}k++;}参考程序(续)//初始化P[x][0]for(i=0;i

8、P[i+1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。