動態規劃之揹包九講之八 揹包問題求具體方案

2021-10-05 17:39:01 字數 783 閱讀 4431

題目:有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。

第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出 字典序最小的方案。這裡的字典序是指:所選物品的編號所構成的序列。物品的編號範圍是 1…n。

輸入格式

第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,每行兩個整數 vi,wi,用空格隔開,分別表示第 i 件物品的體積和價值。

輸出格式

輸出一行,包含若干個用空格隔開的整數,表示最優解中所選物品的編號序列,且該編號序列的字典序最小。物品編號範圍是 1…n。

資料範圍

0解析:本題區別於揹包九講之八—揹包問題求方案數,需要求得最佳答案後,反向尋找方案。由於字典序輸出,運用貪心思想,編號小的物品能拿一定要拿。為此在記錄 f 陣列時從大號物品開始列舉,方便最後逆向尋找方案。

code:

#include

#include

using

namespace std;

const

int n =

1010

;int f[n]

[n], v[n]

, w[n]

;int

main()

}int vol = v;

for(

int i=

1;i<=n;i++)}

return0;

}

動態規劃之揹包九講之四 混合揹包

題目 有 n 種物品和乙個容量是 v 的揹包。物品一共有三類 第一類物品只能用1次 01揹包 第二類物品可以用無限次 完全揹包 第三類物品最多只能用 si 次 多重揹包 每種體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第...

動態規劃之揹包九講之七 揹包問題求方案數

題目 有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出 最優選法的方案數。注意答案可能很大,請輸出答案模 1e9 7 的結果。輸入格式 第一行兩個整數,n,v,用空...

揹包九講之 01揹包

01揹包是最基礎的揹包問題,其中01代表的就是第i個物品的選或不選,在此先設v i 為體積,w i 為價值。很顯然,我們可以使用二位陣列dp i j 來表示前i個物品在揹包容量為j的時候可存放的最大價值。首先dp 0 0 0是很顯然的。而計算dp i j 時,存在01兩種情況 選或不選第i件物品。1...