1.实践题目:
给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。
2.问题描述:
输入有n+1行:
第 1 行是数字三角形的行数 n,1<=n<=100。
接下来 n行是数字三角形各行中的数字。所有数字在0..99 之间。
输出最大路径的值。
在这里给出一组输入。例如:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
在这里给出相应的输出。例如:
30
3.算法描述:
4.算法时间及空间复杂度分析:
时间复杂度:
T(n)= n + (n-1) + (n-2) + … + 1 = n(n-1)/2 = n^2
在第n行,程执行n次将数据存入备忘录,(n-1)层每个数字经过一次比较,最后执行(n-1)次将数据存入备忘录,依次类推,得出最后时间复杂度为n^2。
空间复杂度:
程序需要用到的空间,是一个备忘录数组,数组大小为n * n,即空间复杂度O(n)= n^2。
5.心得体会:
一开始对动态规划不太熟悉和理解,通过做题目,思考和编程,加深了自己对动态规划方法的理解和深入的认识,锻炼了自身的思维,也提高了自己的编程水平。
原文:https://www.cnblogs.com/fzxblogs/p/11716952.html