01揹包問題

2021-10-09 12:35:31 字數 866 閱讀 3351

有n件物品和乙個容量為v的揹包。放入第i件物品耗費的空間是vi,得到的價值是wi。求解將哪些物品裝入揹包可以使得價值之和最大。

二維陣列的暴力解法,未涉及空間優化。

首先用子問題來定義狀態,f[i][j]表示前i個物品放到容量為j的空間總價值最大。f[i][j]這個狀態是由i-1推過來的,這裡有兩種考慮:第i中物品選擇還是不選擇,如果不選擇f[i][j]==f[i-1][j],如果選擇f[i][j] = max(f[i-1][j], f[i-1][j-v[i]]+w[i])。

max(f[i-1][j], f[i-1][j-v[i]]+w[i])的解釋:

第i件物品選擇,第i件物品佔據的空間是v[i],價值為w[i]。那麼前i-1件物品所佔據的空間為j-v[i],價值為f[i-1][j-v[i]]。而f[i][j]是f[i-1][j]和f[i-1][j-v[i]]+w[i]其中較大的乙個。

**部分:

#include

using

namespace std;

const

int maxn=

1010

;int v[maxn]

, w[maxn]

;int f[maxn]

[maxn]

;int n, m;

//分別表示物品總數為n 揹包容量為m

intmain()

}}int res =0;

for(

int i=

0; i<=m;

++i)

return0;

}

揹包問題 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...