完全揹包問題

2022-08-20 23:33:18 字數 953 閱讀 4409

問題描述

有n種重量和價值分貝為wi, vi的物品。 從這些物品中挑選總重量不超過w的物品, 求挑選物品總價值的最大值。在這裡, 每種物品可以挑選任意多件。

限制條件

1 <= n <= 100

1 <= wi, vi <= 100

1 <= w <= 10000

方案一:再用乙個迴圈來遍歷所有的取法

for (int i = 0; i < n; i++)

}}

//事實上 列表可以發現重複的計算

//發現 dp[i][j-k*bag[i].w]+bag[i].v選擇 k的情況 和 dp[i+1][j-bag[i].w]+bag[i].v中選擇 k-1個情況是相同的計算

//所以 dp[i][j]中 k>= 1的計算已經在dp[i+1][j-bag[i].w]+bag[i].v完成

所以狀態轉移方程

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

1 #include 2 #include 

3 #include 4

5using

namespace

std;67

struct

bag8

bag[128

];11

intmain()

1221 scanf("

%d",&w);

23int dp[128][128];

24 memset(dp, 0, sizeof

(dp));

39for (int i =0; i < n; i++)

4046

}47 printf("

%d\n

", dp[n][w]);48}

49return0;

50 }

揹包問題(完全揹包)

1.矩陣鏈乘法 2.投資組合問題 3.完全揹包問題 4.01揹包問題 5.最長公共子串行 乙個揹包,可以放入n種物品,物品j的重量和價值分別為,如果揹包的最大重量限制是b,怎麼樣選擇放入揹包的物品以使得揹包的總價值最大?組合優化問題,設表示裝入揹包的第j個物品的數量,解可以表示為。那麼目標函式和約束...

完全揹包問題

這個是從ppt上弄過來的。完全揹包問題 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。放入第i種物品的耗費的空間是ci,得到的價值是wi。求解 將哪些物品裝入揹包,可使這些物品的耗費的空間總和不超過揹包容量,且價值總和最大 基本思路 這個問題非常類似於01揹包問題,所不同的是每種物品有無限...

完全揹包問題

設有n種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為m,今從n種物品中選取若干件 用乙個物品可以多次選取 使其重量的和小於等於m,而價值的和為最大。輸入有多組資料,對於每組輸入資料第1行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 第2...