01揹包問題 DP

2021-10-06 00:13:23 字數 810 閱讀 5366

有 

n件物品和乙個容量是 

v 的揹包。每件物品只能使用一次。

第 i件物品的體積是 

vi,價值是 

wi。

求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。

輸出最大價值。

第一行兩個整數,

n,v,用空格隔開,分別表示物品數量和揹包容積。

接下來有 

n 行,每行兩個整數 

vi,wi,用空格隔開,分別表示第 i

件物品的體積和價值。

輸出乙個整數,表示最大價值。

00

4 5

1 22 4

3 44 5

8
#include#includeusing namespace std;

int n, m;

int v[1010], w[1010], f[1010][1010];

int main()

} cout << f[n][m] << "\n";// f[n][m]即為最大值

return 0;

}

#include#includeusing namespace std;

int n, m;

int v[1010], w[1010], f[1010];// f[j]:容量為j所能取得的最大值

int main()

cout << f[m] << "\n";//f[m]即最大值

return 0;

}

01揹包問題 dp

這道題需要從定義去理解 dp i 1 j 定義為 在前i個物品裡面選出來的總體積不大於j的最大的價值 所以這樣就可以知道了,dp i 1 j 就表示在前i個物體裡面選出來的不超過給定體積的最大價值了 所以清楚定義後就有 如果當前超過了當前體積了 那麼他肯定就是dp i 1 j dp i j 了 如果...

01揹包問題(dp)

思路 填表。以下有幾種情況 情況一 第j件放不進去 當前容量i小於第i件物品 這時所得價值為 dp i j dp i j 1 情況二 第j件不放進去 容量足夠 這時所得價值為 dp i j dp i j 1 情況三 第j件放進去 容量足夠 這時所得價值為 dp i weigh j j 1 value...

0 1揹包問題(DP)

揹包問題具體例子 假設現有容量10kg的揹包,另外有3個物品,分別為a1,a2,a3。物品a1重量為3kg,價值為4 物品a2重量為4kg,價值為5 物品a3重量為5kg,價值為6。將哪些物品放入揹包可使得揹包中的總價值最大?首先想到的,一般是窮舉法,乙個乙個地試,對於數目小的例子適用,如果容量增大...