第三章作业
实践报告
1.1 递归方程式、定义、边界条件
(1)状态定义
设:dp[i][j]:表示从起点 (1,1) 走到网格位置 (i,j)\时,所需的最小通行总费用。cost[i][j]:网格第 i 行第 j 列方格本身的费用。
(2)递归方程(状态转移方程)
到达 (i,j)只有两种合法来源:上方格子 (i-1,j)(向下走一步)、左侧格子 (i,j-1)(向右走一步)。
dp[i][j] = cost[i][j] + min(dp[i-1][j],dp[i][j-1])
(3)边界条件
1.起点:dp[1][1] = cost[1][1],起点的最小费用就是自身费用。
2.第一行(i=1,j>1):第一行不能从上方来,只能从左边依次向右走:dp[1][j] = dp[1][j-1] + cost[1][j]
3.第一列(j=1,i>1):第一列不能从左边来,只能从上边依次向下走:dp[i][1] = dp[i-1][1] + cost[i][1]
1.2 填表法说明
表的维度:二维数组 dp[N+1][N+1](下标从 1 开始,方便处理边界,也可以用 0 下标),是 N 行 N 列的 DP 表。
填表范围:先填第 1 行、第 1 列(边界)
再依次填充剩下 i>=2,j>=2的内部单元格
填表顺序:按从上到下、从左到右的顺序填表:先填第一行从左往右;再填第一列从上往下;之后逐行遍历,每行内部从左向右逐个计算 dp[i][j]。
原问题最优值最终答案就是dp[N][N],即 DP 表右下角元素,代表从起点走到终点(N,N)的最小总费用。
1.3时间复杂度:O(N^2) 一共NxN个 DP 状态,每个状态的转移仅做一次取 min 和加法,是常数O(1)操作。
空间复杂度:O(N^2)
对动态规划算法的理解和体会:动态规划核心思想是拆分问题、存储子问题答案,避免重复计算,适合具有最优子结构和重叠子问题的问题。一个大问题的最优解,可以由它子问题的最优解组合得到

浙公网安备 33010602011771号