C 揹包問題

2021-08-07 16:46:36 字數 855 閱讀 5720

有許多東西要放入揹包,但揹包容量有限,現給出物品的種類,以及每種物品的數量、體積和價值,求出揹包能夠裝物品的最大價值。

輸入有多組資料,每組資料的第一行有2個整數,物品種數n(1<=n<=2000)和揹包裝載體積v(1<=v<=500)。

2行到i+1行每行3個整數,為第i種物品的數量m(1<=m<=5000)、體積w(1<=w<=20)、價值s(1<=s<=100)。

對於每組資料輸出乙個整數,即為能拿到的最大的物品價值總和。

輸入

2 10

3 4 3

2 2 5

輸出(2*5+1*3 = 13)

多重揹包, 轉化為以二進位制形式的01揹包

#include 

#include

#include

using

namespace

std;

int main()

int dp[vol+1] ;

memset(dp, 0, sizeof(dp));

for (int i = 1; i <= num; i++)

for (int k = 1; k <= m[i]; k++)

for (int j = vol; j >= w[i]; j--)

dp[j] = max(dp[j], dp[j - w[i]] + s[i]);

cout

<< "總的價值為: "

<< dp[10] << endl;

system("pause");

return

0;}

C 揹包問題

在0 1揹包中,物體或者被裝入揹包,或者不被裝入揹包,只有兩種選擇 迴圈變數i,j的意義 前i個物品能夠裝入載重量為j的揹包中 陣列value的意義 value i j 表示前i個物品能加載重量為j的揹包中的最大價值 若w i j,第i個物品不被裝入揹包,否則,第i個物品放入揹包後的最大價值 val...

c 揹包問題

動態規劃和貪心中的五個揹包問題,收集並整理出來放在這裡。0 1揹包問題是一道動規的題,其題目意思就是每樣物品只能取乙個。二維 中概括來說是上面位置的數 上面的位置減物品質量這個數值後這個位子上的數加物品的價值比較哪個大,這裡為了方便都轉換為一維陣列來做。一樣的 include using names...

c 揹包問題

又鴿了好久 博主剛剛學會揹包問題不久,然後有一段時間沒練習了 今天就來重新溫習一下,順手就寫了這一篇部落格。好了,下面進入正題!揹包問題是動態規劃的乙個分支 主要是分成了01揹包 完全揹包和多重揹包。下面從01揹包開始講解。01揹包是在m件物品取出若干件放在空間為w的揹包裡,每件物品的體積為w1,w...