揹包題型總結

KS_Fszha發表於2024-07-09

概述

大致分為以下幾類:

  1. 01揹包
  2. 完全揹包
  3. 混合揹包
  4. 二維揹包
  5. 分組揹包

以及一個變式:跳樓梯模型,本質是轉移順序的改變。

揹包題基本上沒有套路,只能靠多練題,總結思路,最重要的還是把問題抽象成揹包模型的能力。

01 揹包

特點:無序加入,每個物品加一次。

完全揹包

特點:無序加入,每個物品無限加。

變式:跳樓梯模型:問跳完一段樓梯有多少種不同的方案數

這兩者的區別就在於:

  1. 跳樓梯模型只有求方案數時才可以使用,而完全揹包既可以求方案數,也可以求最優解。(完全揹包除了求方案數以外,求最優解其實可以使用跳樓梯模型,但是這種寫法不普遍也不推薦。)
  2. 跳樓梯模型強調有序 ,即要考慮誰先放誰後放;而完全揹包強調無序,兩個物品先放後放不會影響最終答案。
  3. 轉移順序不同。

第三點的區別最主要體現在程式碼上:

完全揹包是外層先迴圈物品種類,然後迴圈揹包容量。這樣就可以透過人為地定一個放的順序來達到無序的效果。
跳樓梯模型是外層先迴圈揹包容量,然後迴圈物體種類。這樣就可以使後放的情況包含先放的情況。
具體區別可以看這兩個題,很明顯:

跳樓梯模型:紙幣問題2
完全揹包:紙幣問題3

相關文章