动态规划算法的应用实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二动态规划算法的应用

一、实验目的

1.掌握动态规划算法的基本思想,包括最优子结构性质和基于表格的最优值计算方法。

2.熟练掌握分阶段的和递推的最优子结构分析方法。

3.学会利用动态规划算法解决实际问题。

二、实验内容

1.问题描述:

题目一:数塔问题

给定一个数塔,其存储形式为如下所示的下三角矩阵。在此数塔中,从顶部出发,在每一节点可以选择向下走还是向右走,一直走到底层。请找出一条路径,使路径上的数值和最大。

输入样例(数塔):

9

12 15

10 6 8

2 18 9 5

19 7 10 4 16

输出样例(最大路径和):

59

三、算法设计

void main()

{

申明一个5*5的二维数组;

for(int i=0;i<5;i++)

{

for(int j=0;j<=i;j++)

{

输入数组元素p[i][j];

}

}

for(int k=0;k<5;k++)

{

for(int w=0;w<=k;w++)

{

输出数组元素p[k][w];

}

}

for(int a=4;a>0;a--)

{

for(int s=0;s<=a;s++)

{

if(p[a][s]大于p[a][s+1])

p[a-1][s]等于p[a-1][s]加p[a][s];

else

p[a-1][s] 等于p[a-1][s] 加p[a][s+1];

}

}

输出p[0][0]

}

四.程序调试及运行结果分析

五.实验总结

虽然这个实验比较简单,但是通过这次实验使我更加了解的动态规划法的好处和、,在解决问题时要尝试使用动态规划,这样就有可能得到一种即简单复杂性有不高的算法。

附录:程序清单(程序过长,可附主要部分)

#include

int main()

{

int m,n;

int p[5][5];

cout<<"输入矩阵的下三角的元素!!"<

for(int i=0;i<5;i++)

{

for(int j=0;j<=i;j++)

{

cout<<"输入第"<

cin>>p[i][j];

}

}

for(int k=0;k<5;k++)

{

for(int w=0;w<=k;w++)

{

cout<

}

cout<

}

for(int a=4;a>0;a--)

{

for(int s=0;s<=a;s++)

{

if(p[a][s]>p[a][s+1])

p[a-1][s]=p[a-1][s]+p[a][s];

else

p[a-1][s]=p[a-1][s]+p[a][s+1];

}

}

cout<<"最大路径和为:"<

return 0;

}

相关文档
最新文档