This commit is contained in:
krahets
2023-07-26 08:58:52 +08:00
parent 583d89729e
commit 6381f16506
45 changed files with 198 additions and 198 deletions
@@ -476,8 +476,8 @@ $$
为了提升算法效率,**我们希望所有的重叠子问题都只被计算一次**。为此,我们声明一个数组 `mem` 来记录每个子问题的解,并在搜索过程中这样做:
1. 当首次计算 $dp[i]$ 时,我们将其记录至 `mem[i]` ,以便之后使用
2. 当再次需要计算 $dp[i]$ 时,我们便可直接从 `mem[i]` 中获取结果,从而将重叠子问题剪枝
1. 当首次计算 $dp[i]$ 时,我们将其记录至 `mem[i]` ,以便之后使用
2. 当再次需要计算 $dp[i]$ 时,我们便可直接从 `mem[i]` 中获取结果,从而将重叠子问题剪枝
=== "Java"
@@ -885,9 +885,9 @@ $$
总结以上,动态规划的常用术语包括:
- 将数组 `dp` 称为「$dp$ 表」,$dp[i]$ 表示状态 $i$ 对应子问题的解
- 将最小子问题对应的状态(即第 $1$ , $2$ 阶楼梯)称为「初始状态」
- 将递推公式 $dp[i] = dp[i-1] + dp[i-2]$ 称为「状态转移方程」
- 将数组 `dp` 称为「$dp$ 表」,$dp[i]$ 表示状态 $i$ 对应子问题的解
- 将最小子问题对应的状态(即第 $1$ , $2$ 阶楼梯)称为「初始状态」
- 将递推公式 $dp[i] = dp[i-1] + dp[i-2]$ 称为「状态转移方程」
![爬楼梯的动态规划过程](intro_to_dynamic_programming.assets/climbing_stairs_dp.png)