1.实践题目

7-1 数字三角形

2.问题描述

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

3.算法描述

①输入格式:

输入有n+1行:

第 1 行是数字三角形的行数 n,1<=n<=100。

接下来 n行是数字三角形各行中的数字。所有数字在0..99 之间。

②初始化

定义一个二维数组,将n行的数据呈直角三角形式存放在数组中。

③动态规划

从三角形底部向上依次计算保留max值。

④输出格式:

输出最大路径的值。

 

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

两个for执行次数为n(n-1)/2,因此时间复杂度为O(N^2)

程序执行所需要的空间为n^2/2,因此空间复杂度为O(N^2)

5.心得体会

本次实践学习到了自下而上解决问题的思想,原本是从第一行往下思考,发现不得解的情况下,想起了老师的提示,从数组的最后一行往上累加,果然轻松了不少,收获是以后会更加灵活地思考问题。

得到了编程的快乐。这是第一次在做算法作业时一次性测试成功。虽然这个题很简单,但是成就感也会激励我继续努力学习。