算法第三次作业
1.1.
令 f(i,j) 表示从第 i 行第 j 列位置开始到三角形底部能取得的最大路径和;递推关系(当 i < n 时): f(i,j) = a[i][j] + max( f(i+1, j), f(i+1, j+1) ),因为从 (i,j) 向下有两种选择,分别进入下一行的 j 或 j+1,取两者的较大值再加上当前值;边界条件(底行 i = n):f(n, j) = a[n][j], 对所有 1 ≤ j ≤ n(因为到底了,最大和就是自身)。
1.2.
表的维度:二维表 f[1..n][1..n]。
填表范围:从底行 i = n 向上填到 i = 1;每行填充 j = 1..i。
填表顺序:自底向上依次计算 f(i,j)(i 从 n-1 到 1),每行内 j 从 1 到 i 均可。
原问题的最优值是 f(1,1)。
1.3.
时间复杂度:每个三角形中的元素恰好被计算一次,总共约 n(n+1)/2 个元素,因此时间复杂度为 O(n^2)。
空间复杂度:使用二维表 f[n+1][n+1],空间复杂度为 O(n^2)。
2.
动态规划的核心是“最优子结构”,通过“复用重复子问题”的思想,把指数级的暴力搜索转为多项式级的计算。它会把原本多次计算的相同子问题只算一次并保存结果,显著节省了时间。同样的,动态规划法关键在于如何定义合适状态与转移,有时候找到正确的状态表达并不直观,需要较强的抽象能力和经验。总的来说,动态规划法是一个实用且方便的技巧,但想要做到熟练运用,还需多加练习,多培养思维。

浙公网安备 33010602011771号