第三章作业
动态规划法求解数字三角形问题 实践报告
一、问题分析
数字三角形问题要求从三角形顶部出发,每次只能向下或向右下移动,求到达底部路径的最大数字和。
二、动态规划求解步骤分析
状态定义
设 arr[i][j]表示从位置 (i, j)出发到达三角形底部的最大路径和。
最优子结构性质
从 (i, j)出发的最优解包含从它下方两个位置 (i+1, j)和 (i+1, j+1)出发的最优解之一,即整体最优解包含子问题的最优解。
递归方程式
arr[i][j]=arr[i][j]+max(arr[i+1][j],dp[i+1][j+1])
边界条件
当 i = n-1(最后一行)时:arr[n−1][j]=arr[n−1][j](其中 0≤j≤n−1)
表的维度
二维表:arr[n][n]
有效区域:下三角区域(j ≤ i)
填表范围
行范围:i从 n-2到 0(自底向上)
列范围:对于每行 i,j从 0到 i
填表顺序
采用自底向上的顺序:初始化最后一行:arr[n-1][j] = arr[n-1][j],从倒数第二行开始向上逐行计算,每行从左到右计算
原问题的最优值
dp[0][0]表示从三角形顶部出发到达底部的最大路径和。
算法复杂度分析
时间复杂度
三角形总元素数:n(n+1)/2 = O(n²),每个元素计算时间为 O(1),总时间复杂度:O(n²)
空间复杂度
算法原地修改输入数组,不需要额外空间,空间复杂度:O(1)(不计输入存储空间)
对动态规划算法的理解与体会
动态规划适用于具有最优子结构和重叠子问题的问题。本题中,从某点到底部的最优解,可由其下方两点最优解推导,体现了最优子结构。直接递归会重复计算子问题,而这可以通过填表避免了重复计算。对于数字三角形这类问题,从下往上递推比从上往下更简洁,因为底部状态已知,向上推没有条件判断。

浙公网安备 33010602011771号