mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-23 17:54:27 +08:00
deploy
This commit is contained in:
@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
|
||||
<title>13.3. DP 解题思路(New) - Hello 算法</title>
|
||||
<title>14.3. DP 解题思路(New) - Hello 算法</title>
|
||||
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#133" class="md-skip">
|
||||
<a href="#143" class="md-skip">
|
||||
跳转至
|
||||
</a>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
13.3. DP 解题思路(New)
|
||||
14.3. DP 解题思路(New)
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@ -1771,6 +1771,87 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_divide_and_conquer/">12. 分治</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 分治
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/divide_and_conquer/" class="md-nav__link">
|
||||
12.1. 分治算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/build_binary_tree/" class="md-nav__link">
|
||||
12.2. 构建树问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1782,18 +1863,18 @@
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_backtracking/">12. 回溯</a>
|
||||
<a href="../../chapter_backtracking/">13. 回溯</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 回溯
|
||||
13. 回溯
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1806,7 +1887,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_backtracking/backtracking_algorithm/" class="md-nav__link">
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1820,7 +1901,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_backtracking/permutations_problem/" class="md-nav__link">
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1834,7 +1915,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_backtracking/subset_sum_problem/" class="md-nav__link">
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1848,7 +1929,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_backtracking/n_queens_problem/" class="md-nav__link">
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1862,7 +1943,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_backtracking/summary/" class="md-nav__link">
|
||||
12.5. 小结
|
||||
13.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1890,7 +1971,7 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" checked>
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_15" checked>
|
||||
|
||||
|
||||
|
||||
@ -1917,18 +1998,18 @@
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../">13. 动态规划</a>
|
||||
<a href="../">14. 动态规划</a>
|
||||
|
||||
<label for="__nav_14">
|
||||
<label for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
13. 动态规划
|
||||
14. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1941,7 +2022,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../intro_to_dynamic_programming/" class="md-nav__link">
|
||||
13.1. 初探动态规划(New)
|
||||
14.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1955,7 +2036,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../dp_problem_features/" class="md-nav__link">
|
||||
13.2. DP 问题特性(New)
|
||||
14.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1978,12 +2059,12 @@
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
13.3. DP 解题思路(New)
|
||||
14.3. DP 解题思路(New)
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
13.3. DP 解题思路(New)
|
||||
14.3. DP 解题思路(New)
|
||||
</a>
|
||||
|
||||
|
||||
@ -2002,36 +2083,36 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1331" class="md-nav__link">
|
||||
13.3.1. 问题判断
|
||||
<a href="#1431" class="md-nav__link">
|
||||
14.3.1. 问题判断
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1332" class="md-nav__link">
|
||||
13.3.2. 问题求解
|
||||
<a href="#1432" class="md-nav__link">
|
||||
14.3.2. 问题求解
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1333" class="md-nav__link">
|
||||
13.3.3. 方法一:暴力搜索
|
||||
<a href="#1433" class="md-nav__link">
|
||||
14.3.3. 方法一:暴力搜索
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1334" class="md-nav__link">
|
||||
13.3.4. 方法二:记忆化搜索
|
||||
<a href="#1434" class="md-nav__link">
|
||||
14.3.4. 方法二:记忆化搜索
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1335" class="md-nav__link">
|
||||
13.3.5. 方法三:动态规划
|
||||
<a href="#1435" class="md-nav__link">
|
||||
14.3.5. 方法三:动态规划
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -2052,7 +2133,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../knapsack_problem/" class="md-nav__link">
|
||||
13.4. 0-1 背包问题(New)
|
||||
14.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2066,7 +2147,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../unbounded_knapsack_problem/" class="md-nav__link">
|
||||
13.5. 完全背包问题(New)
|
||||
14.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2080,7 +2161,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../edit_distance_problem/" class="md-nav__link">
|
||||
13.6. 编辑距离问题(New)
|
||||
14.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2094,76 +2175,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../summary/" class="md-nav__link">
|
||||
13.7. 小结(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_15" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
|
||||
14. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
14. 附录
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
14.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
14.2. 一起参与创作
|
||||
14.7. 小结(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2194,6 +2206,75 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
|
||||
15. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
15. 附录
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
15.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
15.2. 一起参与创作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_17" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2206,8 +2287,8 @@
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_17_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_17">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
参考文献
|
||||
</label>
|
||||
@ -2248,36 +2329,36 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1331" class="md-nav__link">
|
||||
13.3.1. 问题判断
|
||||
<a href="#1431" class="md-nav__link">
|
||||
14.3.1. 问题判断
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1332" class="md-nav__link">
|
||||
13.3.2. 问题求解
|
||||
<a href="#1432" class="md-nav__link">
|
||||
14.3.2. 问题求解
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1333" class="md-nav__link">
|
||||
13.3.3. 方法一:暴力搜索
|
||||
<a href="#1433" class="md-nav__link">
|
||||
14.3.3. 方法一:暴力搜索
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1334" class="md-nav__link">
|
||||
13.3.4. 方法二:记忆化搜索
|
||||
<a href="#1434" class="md-nav__link">
|
||||
14.3.4. 方法二:记忆化搜索
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1335" class="md-nav__link">
|
||||
13.3.5. 方法三:动态规划
|
||||
<a href="#1435" class="md-nav__link">
|
||||
14.3.5. 方法三:动态规划
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -2305,13 +2386,13 @@
|
||||
|
||||
|
||||
|
||||
<h1 id="133">13.3. 动态规划解题思路<a class="headerlink" href="#133" title="Permanent link">¶</a></h1>
|
||||
<h1 id="143">14.3. 动态规划解题思路<a class="headerlink" href="#143" title="Permanent link">¶</a></h1>
|
||||
<p>上两节介绍了动态规划问题的主要特征,接下来我们一起探究两个更加实用的问题:</p>
|
||||
<ol>
|
||||
<li>如何判断一个问题是不是动态规划问题?</li>
|
||||
<li>求解动态规划问题该从何处入手,完整步骤是什么?</li>
|
||||
</ol>
|
||||
<h2 id="1331">13.3.1. 问题判断<a class="headerlink" href="#1331" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1431">14.3.1. 问题判断<a class="headerlink" href="#1431" title="Permanent link">¶</a></h2>
|
||||
<p>总的来说,如果一个问题包含重叠子问题、最优子结构,并满足无后效性,那么它通常就适合用动态规划求解,但我们很难从问题描述上直接提取出这些特性。因此我们通常会放宽条件,<strong>先观察问题是否适合使用回溯(穷举)解决</strong>。</p>
|
||||
<p><strong>适合用回溯解决的问题通常满足“决策树模型”</strong>,这种问题可以使用树形结构来描述,其中每一个节点代表一个决策,每一条路径代表一个决策序列。</p>
|
||||
<p>换句话说,如果问题包含明确的决策概念,并且解是通过一系列决策产生的,那么它就满足决策树模型,通常可以使用回溯来解决。</p>
|
||||
@ -2326,7 +2407,7 @@
|
||||
<li>问题描述中有明显的排列组合的特征,需要返回具体的多个方案。</li>
|
||||
</ul>
|
||||
<p>如果一个问题满足决策树模型,并具有较为明显的“加分项“,我们就可以假设它是一个动态规划问题,并尝试求解它。</p>
|
||||
<h2 id="1332">13.3.2. 问题求解<a class="headerlink" href="#1332" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1432">14.3.2. 问题求解<a class="headerlink" href="#1432" title="Permanent link">¶</a></h2>
|
||||
<p>动态规划的解题流程可能会因问题的性质和难度而有所不同,但通常遵循以下步骤:描述决策,定义状态,建立 <span class="arithmatex">\(dp\)</span> 表,推导状态转移方程,确定边界条件等。</p>
|
||||
<p>为了更形象地展示解题步骤,我们使用一个经典问题「最小路径和」来举例。</p>
|
||||
<div class="admonition question">
|
||||
@ -2374,7 +2455,7 @@ dp[i, j] = \min(dp[i-1, j], dp[i, j-1]) + grid[i, j]
|
||||
<p>边界条件即初始状态,在搜索中用于剪枝,在动态规划中用于初始化 <span class="arithmatex">\(dp\)</span> 表。状态转移顺序的核心是要保证在计算当前问题时,所有它依赖的更小子问题都已经被正确地计算出来。</p>
|
||||
</div>
|
||||
<p>接下来,我们就可以实现动态规划代码了。然而,由于子问题分解是一种从顶至底的思想,因此按照“暴力搜索 <span class="arithmatex">\(\rightarrow\)</span> 记忆化搜索 <span class="arithmatex">\(\rightarrow\)</span> 动态规划”的顺序实现更加符合思维习惯。</p>
|
||||
<h2 id="1333">13.3.3. 方法一:暴力搜索<a class="headerlink" href="#1333" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1433">14.3.3. 方法一:暴力搜索<a class="headerlink" href="#1433" title="Permanent link">¶</a></h2>
|
||||
<p>从状态 <span class="arithmatex">\([i, j]\)</span> 开始搜索,不断分解为更小的状态 <span class="arithmatex">\([i-1, j]\)</span> 和 <span class="arithmatex">\([i, j-1]\)</span> ,包括以下递归要素:</p>
|
||||
<ul>
|
||||
<li><strong>递归参数</strong>:状态 <span class="arithmatex">\([i, j]\)</span> ;<strong>返回值</strong>:从 <span class="arithmatex">\([0, 0]\)</span> 到 <span class="arithmatex">\([i, j]\)</span> 的最小路径和 <span class="arithmatex">\(dp[i, j]\)</span> ;</li>
|
||||
@ -2492,7 +2573,7 @@ dp[i, j] = \min(dp[i-1, j], dp[i, j-1]) + grid[i, j]
|
||||
<p align="center"> Fig. 暴力搜索递归树 </p>
|
||||
|
||||
<p>每个状态都有向下和向右两种选择,从左上角走到右下角总共需要 <span class="arithmatex">\(m + n - 2\)</span> 步,所以最差时间复杂度为 <span class="arithmatex">\(O(2^{m + n})\)</span> 。请注意,这种计算方式未考虑临近网格边界的情况,当到达网络边界时只剩下一种选择。因此实际的路径数量会少一些。</p>
|
||||
<h2 id="1334">13.3.4. 方法二:记忆化搜索<a class="headerlink" href="#1334" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1434">14.3.4. 方法二:记忆化搜索<a class="headerlink" href="#1434" title="Permanent link">¶</a></h2>
|
||||
<p>为了避免重复计算重叠子问题,我们引入一个和网格 <code>grid</code> 相同尺寸的记忆列表 <code>mem</code> ,用于记录各个子问题的解,提升搜索效率。</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="2:11"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><input id="__tabbed_2_6" name="__tabbed_2" type="radio" /><input id="__tabbed_2_7" name="__tabbed_2" type="radio" /><input id="__tabbed_2_8" name="__tabbed_2" type="radio" /><input id="__tabbed_2_9" name="__tabbed_2" type="radio" /><input id="__tabbed_2_10" name="__tabbed_2" type="radio" /><input id="__tabbed_2_11" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Java</label><label for="__tabbed_2_2">C++</label><label for="__tabbed_2_3">Python</label><label for="__tabbed_2_4">Go</label><label for="__tabbed_2_5">JavaScript</label><label for="__tabbed_2_6">TypeScript</label><label for="__tabbed_2_7">C</label><label for="__tabbed_2_8">C#</label><label for="__tabbed_2_9">Swift</label><label for="__tabbed_2_10">Zig</label><label for="__tabbed_2_11">Dart</label></div>
|
||||
<div class="tabbed-content">
|
||||
@ -2624,7 +2705,7 @@ dp[i, j] = \min(dp[i-1, j], dp[i, j-1]) + grid[i, j]
|
||||
<p><img alt="记忆化搜索递归树" src="../dp_solution_pipeline.assets/min_path_sum_dfs_mem.png" /></p>
|
||||
<p align="center"> Fig. 记忆化搜索递归树 </p>
|
||||
|
||||
<h2 id="1335">13.3.5. 方法三:动态规划<a class="headerlink" href="#1335" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1435">14.3.5. 方法三:动态规划<a class="headerlink" href="#1435" title="Permanent link">¶</a></h2>
|
||||
<p>动态规划代码是从底至顶的,仅需循环即可实现。</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="3:11"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><input id="__tabbed_3_2" name="__tabbed_3" type="radio" /><input id="__tabbed_3_3" name="__tabbed_3" type="radio" /><input id="__tabbed_3_4" name="__tabbed_3" type="radio" /><input id="__tabbed_3_5" name="__tabbed_3" type="radio" /><input id="__tabbed_3_6" name="__tabbed_3" type="radio" /><input id="__tabbed_3_7" name="__tabbed_3" type="radio" /><input id="__tabbed_3_8" name="__tabbed_3" type="radio" /><input id="__tabbed_3_9" name="__tabbed_3" type="radio" /><input id="__tabbed_3_10" name="__tabbed_3" type="radio" /><input id="__tabbed_3_11" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">Java</label><label for="__tabbed_3_2">C++</label><label for="__tabbed_3_3">Python</label><label for="__tabbed_3_4">Go</label><label for="__tabbed_3_5">JavaScript</label><label for="__tabbed_3_6">TypeScript</label><label for="__tabbed_3_7">C</label><label for="__tabbed_3_8">C#</label><label for="__tabbed_3_9">Swift</label><label for="__tabbed_3_10">Zig</label><label for="__tabbed_3_11">Dart</label></div>
|
||||
<div class="tabbed-content">
|
||||
@ -2997,7 +3078,7 @@ dp[i, j] = \min(dp[i-1, j], dp[i, j-1]) + grid[i, j]
|
||||
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
||||
|
||||
|
||||
<a href="../dp_problem_features/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 13.2. &nbsp; DP 问题特性(New)" rel="prev">
|
||||
<a href="../dp_problem_features/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 14.2. &nbsp; DP 问题特性(New)" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
@ -3006,20 +3087,20 @@ dp[i, j] = \min(dp[i-1, j], dp[i, j-1]) + grid[i, j]
|
||||
上一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
13.2. DP 问题特性(New)
|
||||
14.2. DP 问题特性(New)
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../knapsack_problem/" class="md-footer__link md-footer__link--next" aria-label="下一页: 13.4. &nbsp; 0-1 背包问题(New)" rel="next">
|
||||
<a href="../knapsack_problem/" class="md-footer__link md-footer__link--next" aria-label="下一页: 14.4. &nbsp; 0-1 背包问题(New)" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<span class="md-footer__direction">
|
||||
下一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
13.4. 0-1 背包问题(New)
|
||||
14.4. 0-1 背包问题(New)
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
|
Reference in New Issue
Block a user