0-1揹包問題 (15分)
n件物品,第i件物品的重量和價值分別為wi和vi(1≤i≤n),揹包容量為w,選擇部分物品裝入揹包,在物品總重量不超過揹包容量的條件下,求裝入的物品總價值最大的最優裝法。
輸入格式:
第一行給出正整數n(≤100)和w(≤1000)。接下來n行資料,每行給出兩個正整數,第i行的資料對應第i件物品的重量wi
和價值vi(0輸出格式:
在第一行輸出裝入物品後獲得的最大價值。在第二行輸出最優裝法,按從小到大的順序依次輸出裝入揹包的物品標號。如果有多種裝法,則輸出字典序最小的最優裝法。數字間以空格分隔,且行首尾不得有多餘空格。 注:序列x=和y=,字典序x=,或者(2) 存在1≤k≤min,=
輸入樣例:
在這裡給出一組輸入。例如:
4 42 4
3 51 4
2 5輸出樣例:
在這裡給出相應的輸出。例如:
91 4
#include
#include
#include
#include
#include
#include
using
namespace std;
int w[
101]
[101];
int wei[
101]
,val[
101]
;int
main()
fill
(w[0
],w[0]
+101
*101,0
);for(
int i = n; i >
0; i--
)else}}
for(
int i =
1; i <= n; i++
) cout<} cout<[w]
for(
int i =
1; i <= n;
++i)
}return0;
}
0 1揹包問題及變種
0 1揹包問題 有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。這個問題的特點是 每種物品只有一件,可以選擇放或者不放。演算法基本思想 利用動態規劃思想 子問題為 f i v 表示前i件物品恰放入乙個...
記錄路徑的01揹包問題
在01揹包問題中,求出最優解並記錄揹包內物品,動態規劃的方法求其問題,最核心的公式為f i j max,在考慮當前第i個物品是否放入的時候就是比較 前面的i 1個物品放在容量為j的揹包中時揹包中總價值與 前面的i 1個物品放在容量為j weight i 的揹包中並加上當前第i個的價值value i ...
01揹包問題 優化及變形
問題描述 有n件商品,第i件商品的重量是weights i 1 價值是values i 1 揹包容量是cap 則揹包能夠裝物品的最大價值首先構建乙個二維陣列dp,dp i j 表示第i件物品時揹包容量為j時的最大價值。如何求得dp i j 1 values i 1 j,說明第i件物品不能放入當前容量...