mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-24 20:16:06 +00:00
deploy
This commit is contained in:
@@ -3537,7 +3537,7 @@
|
||||
<p><strong>背包問題</strong></p>
|
||||
<ul>
|
||||
<li>背包問題是最典型的動態規劃問題之一,具有 0-1 背包、完全背包、多重背包等變種。</li>
|
||||
<li>0-1 背包的狀態定義為前 <span class="arithmatex">\(i\)</span> 個物品在剩餘容量為 <span class="arithmatex">\(c\)</span> 的背包中的最大價值。根據不放入背包和放入背包兩種決策,可得到最優子結構,並構建出狀態轉移方程。在空間最佳化中,由於每個狀態依賴正上方和左上方的狀態,因此需要倒序走訪串列,避免左上方狀態被覆蓋。</li>
|
||||
<li>0-1 背包的狀態定義為前 <span class="arithmatex">\(i\)</span> 個物品在容量為 <span class="arithmatex">\(c\)</span> 的背包中的最大價值。根據不放入背包和放入背包兩種決策,可得到最優子結構,並構建出狀態轉移方程。在空間最佳化中,由於每個狀態依賴正上方和左上方的狀態,因此需要倒序走訪串列,避免左上方狀態被覆蓋。</li>
|
||||
<li>完全背包問題的每種物品的選取數量無限制,因此選擇放入物品的狀態轉移與 0-1 背包問題不同。由於狀態依賴正上方和正左方的狀態,因此在空間最佳化中應當正序走訪。</li>
|
||||
<li>零錢兌換問題是完全背包問題的一個變種。它從求“最大”價值變為求“最小”硬幣數量,因此狀態轉移方程中的 <span class="arithmatex">\(\max()\)</span> 應改為 <span class="arithmatex">\(\min()\)</span> 。從追求“不超過”背包容量到追求“恰好”湊出目標金額,因此使用 <span class="arithmatex">\(amt + 1\)</span> 來表示“無法湊出目標金額”的無效解。</li>
|
||||
<li>零錢兌換問題 II 從求“最少硬幣數量”改為求“硬幣組合數量”,狀態轉移方程相應地從 <span class="arithmatex">\(\min()\)</span> 改為求和運算子。</li>
|
||||
|
||||
Reference in New Issue
Block a user