0 1揹包問題python 0 1揹包問題1

2021-10-11 05:11:19 字數 597 閱讀 3862

鼓搗好久 終於了然了一些

0-1揹包問題描述

有乙個竊賊在偷竊一家商店時發現有n件物品,第i件物品價值為vi元,重量為wi,假設vi和wi都為整數。他希望帶走的東西越值錢越好,但他的揹包中之多只能裝下w磅的東西,w為一整數。他應該帶走哪幾樣東西?

【注】0-1揹包問題中:每件物品或被帶走,或被留下,(需要做出0-1選擇)。小偷不能只帶走某個物品的一部分或帶走兩次以上同乙個物品。

採用動態規劃演算法求解0-1揹包問題,

用子問題定義狀態:即f[i][ j]表示前i件物品放入乙個容量為j的揹包可以獲得最大價值。則其核心狀態轉移方程是:

f[i][ j]=max

即,「將前i件物品放入容量為j的揹包中」這個子問題,若只考慮第i件物品的策略(放或不放),就可以轉化為乙個只牽扯前i-1件物品的問題。如果不放第i件物品,那麼問題就轉化為「前i-1件物品放入容量為j的揹包中」,價值為f[i-1][j];如果放第i件物品,那麼問題就轉化為「前i-1件物品放入剩下的容量為j-a[i]的揹包中」,此時能獲得的最大價值就是f[i-1][ j-a[i]]再加上通過放入第i件物品獲得的價值c[i]

具體實現程式詳見原始碼為.ipython檔案,為方便您審閱,轉存了乙份html檔案。

python 0 1揹包問題(動態規劃)

0 1揹包問題 給定n種物品和乙個容量為c的揹包,物品的重量依次是 2,2,3,1,5,2,其價值依次是2,3,1,5,4,3,揹包問題是如何使選擇裝入揹包內的物品,使得裝入揹包中的物品的總價值最大。其中,每種物品只有全部裝入揹包或不裝入揹包兩種選擇。演算法 n 物品數量 int c 書包能承受的重...

Python 0 1揹包 動態規劃

0 1揹包問題 在能承受一定重量的揹包中,放入重量不同,價值不同的幾件物品,怎樣放能讓揹包中物品的價值最大?比如,有三件物品重量w,價值v分別是 w 5,3,2 v 9,7,8 包的容量是5,也就是我們要求得 maxval v1 v2 v3 約束條件為 ws w1 w2 w3 我們的思路是,列舉出所...

揹包問題 01揹包

有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。01揹包中的 01 就是一種物品只有1件,你可以選擇放進去揹包即1,也可以選擇不放入揹包中即0。include include using namespace std const int ...