01揹包問題

2022-05-26 18:24:12 字數 1480 閱讀 2843

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:

public

class

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...