算法第3章上机实践报告

  1. 实践题目

    数字三角形
    
  2. 问题描述

    给出一个\(n\)行的由数字组成的三角形,第\(i\)层有\(i\)个数字,每步可以向下走或向右下走,问从顶端到底部的路径的最大数字之和是多少。
  3. 算法描述

    \(dp[i][j]\)表示走到第\(i\)行第\(j\)列能取得的最大值,显然\(dp[i][j]\) = \(max(dp[i-1][j],dp[i-1][j-1]) + a[i][j]\)
    最后把最后一行的\(dp\)值遍历一遍,最大值就是答案
  4. 算法时间及空间复杂度分析

    问题规模是\(n^2\),而求解过程中,每个子问题均只求解了一次,故时间复杂度\(O(n^2)\)
    额外空间为二维的\(dp\)数组,空间复杂度为\(O(n^2)\)
  5. 心得体会

    算法没大问题,但有可优化之处。 如果从下往上推,因为第一行只有一个数,可以省去一次\(O(n)\)的遍历。
posted @ 2018-11-10 18:57  Apale  阅读(137)  评论(0)    收藏  举报