第三次作业

1最优子结构与递归方程式
我采用自底向上的递推方法,递归方程:dp[i][j]=a[i][j]+max(dp[i+1][j], dp[i+1][j+1],dp[i][j]=a[i][j]+max(dp[i+1][j], dp[i+1][j+1])
边界条件为最后一行直接等于原三角形对应位置的值:dp[n][j]=a[n][j],j=1,2,…,n
dp[n][j]=a[n][j],j=1,2,…,n
原问题的最优解为dp[1][1]dp[1][1]。
2 填表法
表的维度:二维表 dp[n][n]dp[n][n],实际使用下三角形式存储(第 i 行有 i 个元素)。
填表范围:行 ii 从 nn 到 11(从最后一行向上填),列 jj 从 11 到 ii。
填表顺序:自底向上,在每一行内按任意顺序(通常从左到右)填写,因为当前行只依赖于下一行。
原问题的最优值:存储在 dp[1][1]dp[1][1] 中。
3 算法复杂度分析
时间复杂度:共有 n(n+1)22n(n+1)个状态,每个状态的计算时间为 O(1)
O(1),因此总时间复杂度为 O(n2)O(n2)。
空间复杂度:如直接使用二维 dpdp 数组,空间复杂度为 O(n2)O(n 2);但可优化至 O(n)O(n),因为计算 dp[i]dp[i] 时仅依赖于 dp[i+1]dp[i+1],只需保留一行状态。
对动态规划算法的理解与体会
动态规划的核心在于最优子结构与重叠子问题。在本问题中,最大路径问题可分解为从每个点出发的子问题,且这些子问题被多次重复利用。通过列表存储子问题的解,避免了重复计算,显著提高效率。
状态定义和递推方向的选择至关重要:自底向上通常更直观且易于实现空间优化,而自顶向下(记忆化搜索)更符合自然思路但递归有额外开销。
此外,动态规划训练我们抽象状态、确定转移方程以及处理边界条件的能力,是解决最优化问题的强大工具。

posted @ 2025-11-17 16:13  Rox1  阅读(7)  评论(0)    收藏  举报