0 1揹包問題及字典序最小路徑(輸出放入的物品)

2021-10-24 08:57:18 字數 1066 閱讀 7853

0-1揹包問題 (15分)

n件物品,第i件物品的重量和價值分別為w​i和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件物品不能放入當前容量...