0 1揹包問題

2021-08-07 15:28:25 字數 1129 閱讀 4320

問題描述:

有乙個容量為m(1<=m<=4000000)的揹包,有n(1<=n<=16)個物品,每個物品有體積v(1<=v<=2012)和價值w(0<=2012),現在要你選擇一些物品,使得揹包所裝物品的總價值最大。

input

有多組測試資料,但是不會超過10組。

對於每組測試資料,第一行是兩個整數m和n,表示揹包容量的和物品個數。接下來有n行,每行有兩個整數,表示乙個物品的體積和價值。

輸入到檔案結束。

output

對於每組測試資料,輸出一行,包含乙個整數,為揹包能裝下物品的最大價值。

sample input

10 3

6 95 5

5 53 2

1 22 1

sample output103

**如下:

/*問題描述:

有乙個容量為m(1<=m<=4000000)的揹包,有n(1<=n<=16)個物品,每個物品有體積v(1<=v<=2012)和價值w(0<=2012),現在要你選擇一些物品,使得揹包所裝物品的總價值最大。

input

有多組測試資料,但是不會超過10組。

對於每組測試資料,第一行是兩個整數m和n,表示揹包容量的和物品個數。接下來有n行,每行有兩個整數,表示乙個物品的體積和價值。

輸入到檔案結束。

output

對於每組測試資料,輸出一行,包含乙個整數,為揹包能裝下物品的最大價值。

sample input

10 3

6 95 5

5 53 2

1 22 1

sample output103

*/#include int v[100][100];

int n,m;//n為物品數量,m為揹包容量

int w[100],v[100];

void findmax()//動態規劃

else//前i-1個物品的最優解與第i個物品的價值之和更大}}

}printf("%d\n",v[n][m]);

}int main()

{ int i,j;

while(~scanf("%d %d",&m,&n))

{for(i=0; i

學習心得:又是好久沒發部落格了

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