作业 5 动态规划算法
题目 1:数字三角形路径和最大
(1)算法的求解思路
先用 a[i][j]数组存储第 i 行第 j 个元素,然后更新 a[i][j]数组,a[i][j]
存储从第 1 行走到第 i 行第 j 个元素的最大和,其值等于 a[i][j]加上 a[i-1][j]
与 a[i-1][j-1]中较大的数,将其存储到临时变量 ans 中去,如果新的 a[i][j]
的值大于 ans,则更新 ans 的值为 a[i][j]。将 a[i][j]数组中的所有元素更新一
遍即可遍历所有的可能行走路径,并从中选出最大值。
(2)执行过程分析
测试用例 1:
输入:
15
9 12 15 10 6 8 2 18 9 5 19 7 10 4 16
输出:
59
在 fun 函数中,m 为数字三角形的总行数,a[i][j]为数字三角形中第 i 行
的第 j 个元素,遍历并更新 a[i][j]数组,求出其中的最大值。在测试用例 1 的
输入下,其具体执行过程如下表 1-1 所示。
i
j
a[i][j]
ans
i
j
a[i][j]
ans
1
1
9
9
4
3
41
49
2
1
21
21
4
4
37
49
2
2
24
24
5
1
52
52
3
1
31
31
5
2
56
56
3
2
30
31
5
3
59
59
3
3
32
32
5
4
45
59
4
1
33
33
5
5
53
59
4
2
49
49
表 1-1 算法执行过程 1-1
在函数 fun 中的 for 循环结束处设置断点,通过调试观察 i,j,a[i][j],ans
的值可以得到如图 1 到图 7 所示的结果,为截取的部分运行结果截图,分别与表
1-1 中的变量变化过程相对应。程序执行结果如图 8 所示。
图 1 与表 1-1 中 i=1,j=1 行对应 图 2 与表 1-1 中 i=2,j=1 行对应