1、实践题目

7-1数字三角形

2、问题描述

 给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。

3、算法描述

定义一个二位数组a[ ][ ]用来存放三角形各行各列的数字,再定义一个数组b[ ][ ]存放a[i][j]自下而上经过路径的最大和,则不断自下而上递归,则b[0][0]就是最大和,递归方程为b[i][j]=a[i][j]+max(a[i+1][j],a[i+1][j+1])

4、算法时间及空间复杂度分析

时间复杂度为O(n*n)因为在递归的过程中运用了二维数组a[i][j],I j在递归过程中都将序列访问了一次,所以时间复杂度为O(n*n)

5、心得体会

在动态规划的题目是将一个问题分解多个子问题解答,我们要减少解决每一个子问题的计算量就要将已经计算出来的解进行储存方便下一个子问题查表,分解成多个子问题的时候要看子问题是否有相同的规律找出递归方程,分析是自下而上还是自上而下。最后还是要多做题才能更好的掌握。