算法第三章实践报告

最低通行费

1.1

递归方程式:

dp[1][1] = a[1][1]

dp[1][j] = dp[1][j-1] + a[1][j] (j ≥ 2)dp[i][1] = dp[i-1][1] + a[i][1] (i ≥ 2)

dp[i][j] = a[i][j] + min(dp[i-1][j], dp[i][j-1]) (i,j ≥ 2)

方程式的定义:

a[i][j] 表示第 i 行、第j列格子的费用

dp[i][j]表示从 (1,1) 到 (i,j) 的最小费用,包含起点和 (i,j) 格子的费用

边界条件:

当 i=j=1 时:dp[1][1] = a[1][1]当 i=1、j≥2 时:dp[1][j] = dp[1][j−1] + a[1][j]当 j=1、i≥2 时:dp[i][1] = dp[i−1][1] + a[i][1]

1.2

表的维度:

行和列都是N

填表范围:

起点:dp[1][1]

第一行:dp[1][j],2 ≤ j ≤ N

第一列:dp[i][1],2 ≤ i ≤ N

内部格子:dp[i][j],2 ≤ i ≤ N,2 ≤ j ≤ N

填表顺序:

先计算起点 dp[1][1],再填第一行和第一列。然后令 i 从 2 到 N 递增;对于每个 i,令 j 从 2 到 N 递增,依次填入 dp[i][j]。这样计算每个内部格子时,它上方和左方的状态都已计算完成

原问题的最优值是dp[N][N]

1.3

时间复杂度: O(N²)

空间复杂度 : O(N²)

posted @ 2026-11-03 23:01  benshaw  阅读(5)  评论(0)    收藏  举报