第三章作业
1.1 递归方程式
由“必须在 2N-1 个单位时间穿越出去”可知,商人只能向右或向下走。
设 a[i][j] 为格子费用,dp[i][j] 为从左上角走到 (i,j) 的最小通行费(0 下标):
dp[0][0] = a[0][0]
第一行:
dp[0][j] = dp[0][j-1] + a[0][j]
第一列:
dp[i][0] = dp[i-1][0] + a[i][0]
其余:
dp[i][j] = a[i][j] + min(dp[i-1][j], dp[i][j-1])
含义:到达 (i,j) 只能从上方或左方来,取费用较小者。
1.2 填表法
表的维度:二维表 dp[N][N]。
填表范围:i=0..N-1,j=0..N-1。
填表顺序:先初始化 dp[0][0],再填第一行和第一列;其余按行从上到下、每行从左到右填写。
原问题最优值:dp[N-1][N-1]。
1.3 复杂度
时间复杂度:O(N^2)。
空间复杂度:O(N^2)。由于 dp[i][j] 只依赖上一行和当前行前一列,也可优化到 O(N)。
理解与体会
动态规划的关键是定义状态、找转移、定边界、定顺序。本题的突破口是“2N-1 时间”限制了只能向右或向下走,于是状态 dp[i][j] 很自然。填表顺序要保证依赖项已计算。动态规划通过保存子问题答案避免重复搜索,效率高。实际做题应先保证转移和边界正确,再考虑空间优化。

浙公网安备 33010602011771号