算法第3章上机实践报告
-
实践题目
数字三角形 -
问题描述
给出一个\(n\)行的由数字组成的三角形,第\(i\)层有\(i\)个数字,每步可以向下走或向右下走,问从顶端到底部的路径的最大数字之和是多少。 -
算法描述
用\(dp[i][j]\)表示走到第\(i\)行第\(j\)列能取得的最大值,显然\(dp[i][j]\) = \(max(dp[i-1][j],dp[i-1][j-1]) + a[i][j]\)
最后把最后一行的\(dp\)值遍历一遍,最大值就是答案 -
算法时间及空间复杂度分析
问题规模是\(n^2\),而求解过程中,每个子问题均只求解了一次,故时间复杂度\(O(n^2)\)
额外空间为二维的\(dp\)数组,空间复杂度为\(O(n^2)\) -
心得体会
算法没大问题,但有可优化之处。 如果从下往上推,因为第一行只有一个数,可以省去一次\(O(n)\)的遍历。

浙公网安备 33010602011771号