01揹包問題刷題總結:
125.
揹包問題
ii中文
english有n
個物品和乙個大小為
m的揹包
. 給定陣列
a表示每個物品的大小和陣列
v表示每個物品的價值
.問最多能裝入揹包的總價值是多大
?example
樣例1:
輸入: m = 10, a = [2, 3, 5, 7], v = [1, 5, 2, 4]
輸出: 9
解釋:
裝入a[1]
和a[3]
可以得到最大價值
, v[1] + v[3] = 9
樣例2:
publicclass
solution
for(i=1;i<=n;++i) }}
int res = 0;
for (i=0;i<=m;++i)
}return
res; }
}
思路總結:
把陣列壓成一行,一定要倒著求
總結backpack d
方程:dp[i][w] = max( dp[i-1][w], dp[i-1][ w-a(i-1)] + v(i-1) )
其中:dp[i][w]
表示用前
i 個物品拼出重量
w時最大總價值。
dp[i-1][w] 表示用
前i-1
個物品拼出重量
w時最大總價值
最後乙個是
用前i-1
個物品拼出總重量
w -a(i-1)
時最大總價值,加上第
i個物品。
backpack
可行性--
題面:要求不超過
target
時能拼出的最大重量
--記錄
f[i][w] = 前i
個物品能不能拼出重量w
backpack v, backpack vi ,
計數型揹包
--題面:
要求有多少種方式拼出重量
target
-- 記錄
f[i][w] = 前i
個物品有多少種方式拼出重量w
backpack ii, backpack iii ,
最值型--
題面:記錄能拼出的最大價值
-- 記錄
f[i][w] = 前i
個/種物品拼出重量
w能得到的最大價值
關鍵點:
-最後一步:
1. 最後乙個揹包內物品是哪個
2. 最後乙個物品有沒有揹包
-陣列大小和最大承重
target
有關
揹包問題 01揹包問題
n個物品,總體積是v,每個物品的體積的vi,每個物品的最大價值是wi,在不超過v的體積下求最大價值 eg揹包容積為 5 物品數量為 4 物品的體積分別為 物品的價值分別為 思路定義乙個二位陣列int f new int n 1 v 1 f i j 就表示在1 i個物品中選取體積小於v的情況的最大價值...
揹包問題 01揹包
有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。01揹包中的 01 就是一種物品只有1件,你可以選擇放進去揹包即1,也可以選擇不放入揹包中即0。include include using namespace std const int ...
揹包問題(01揹包)
1085 揹包問題 在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,n和w中間用空格隔開。n為物品的數量,w為揹包的容量。1 n 100,1 w 10000...