算法第三章作业

1.1 最优子结构与递归方程
最优子结构:到达 (i,j)(i,j) 的最优路径,必然包含到达其前驱节点 (i−1,j)(i−1,j) 或 (i,j−1)(i,j−1) 的最优子路径。
状态定义: dp[i][j]dp[i][j] 表示从起点 (1,1)(1,1) 走到 (i,j)(i,j) 的最小累计费用。
递归方程: dp[i][j]=cost[i][j]+min⁡(dp[i−1][j],dp[i][j−1])dp[i][j]=cost[i][j]+min(dp[i−1][j],dp[i][j−1])
边界条件: dp[1][1]=cost[1][1]dp[1][1]=cost[1][1] ;非法区域 dp[0][j]dp[0][j] 与 dp[i][0]dp[i][0] 设为无穷大( ∞∞ )。
1.2 填表法分析
表的维度: N×NN×N 的二维表。
填表范围:行 ii 从 11 到 NN ,列 jj 从 11 到 NN 。
填表顺序:自顶向下,自左向右(因为当前状态仅依赖上方和左方已计算的状态)。
最优值:表格右下角元素 dp[N][N]dp[N][N] 。
1.3 复杂度分析
时间复杂度: O(N2)O(N2) ,需遍历 N×NN×N 的网格,每次状态转移耗时 O(1)O(1) 。
空间复杂度: O(N2)O(N2) ,需存储 N×NN×N 的网格费用及 DP 状态表。
对动态规划算法的理解和体会
状态定义是核心:DP 的关键在于准确定义 dpdp 数组的含义,这直接决定了状态转移的方向。
无后效性是前提:一旦到达某点,之前的路径选择不影响后续决策,仅影响累计值,这是 DP 成立的基础。
边界处理要巧妙:利用“哨兵值”(如将 dp[0][j]dp[0][j] 设为 ∞∞ )可以统一边界逻辑,避免繁琐的 if-else 判断。
区别于贪心:贪心只顾眼前局部最优,而 DP 通过状态表记录全局历史,确保最终结果的全局最优。

posted @ 2026-11-03 00:46  Lynnee11  阅读(5)  评论(0)    收藏  举报