揹包九講 7

2022-10-10 06:03:08 字數 1146 閱讀 7271

有 n 個物品和乙個容量是 v的揹包。

物品之間具有依賴關係,且依賴關係組成一棵樹的形狀。如果選擇乙個物品,則必須選擇它的父節點。

如下圖所示:

如果選擇物品5,則必須選擇物品1和2。這是因為2是5的父節點,1是2的父節點。

每件物品的編號是 ii,體積是 vi,價值是 wi,依賴的父節點編號是 pi。物品的下標範圍是 1…n。

求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。

輸出最大價值。

輸入格式

第一行有兩個整數 n,v,用空格隔開,分別表示物品個數和揹包容量。

接下來有 n 行資料,每行資料表示乙個物品。

第 ii 行有三個整數 vi,wi,pi,用空格隔開,分別表示物品的體積、價值和依賴的物品編號。

如果 pi=−1,表示根節點。資料保證所有物品構成一棵樹。

輸出格式

輸出乙個整數,表示最大價值。

資料範圍

1≤n,v≤100

1≤vi,wi≤100

父節點編號範圍:

輸入樣例

5 7

2 3 -1

2 2 1

3 5 1

4 7 2

3 6 2

輸出樣例:
11
沒看懂,暫時放上別人的解答,以後再考慮

acwing 10. 有依賴的揹包問題(思路不同於dxc,但是個人感覺更好理解) - acwing

#include#includeusing namespace std;

int f[110][110];//f[x][v]表達選擇以x為子樹的物品,在容量不超過v時所獲得的最大價值

vectorg[110];

int v[110],w[110];

int n,m,root;

int dfs(int x)}}

}int main()

dfs(root);

cout<

return 0;

}

揹包九講 簡單揹包

揹包問題是一種動態規劃演算法的衍生問題。它可以被看作一種獨立的題型,也可以看作是一種線性動態規劃。學好揹包 學會揹包,對於深入理解動態規劃演算法有著極大的好處,並能幫助理解一些更深層次的動態規劃問題。那麼就開始吧 題目型別 有 n 件物品和乙個容量為 v 的揹包。第 i 件物品的費體積是 v i 價...

演算法 揹包九講

例題參考 資訊學奧賽一本通 初始化分兩種情況 1 如果揹包要求正好裝滿則初始化 f 0 0,f 1 v inf 2 如果不需要正好裝滿 f 0 v 0 有n件物品和乙個容量為v的揹包。第i件物品的費用 即體積,下同 是w i 價值是c i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,...

揹包九講(9)

以上涉及的各種揹包問題都是要求在揹包容量 費用 的限制下求可以取到的最大價值,但揹包問題還有很多種靈活的問法,在這裡值得提一下。但是我認為,只要深入理解了求揹包問題最大價值的方法,即使問法變化了,也是不難想出演算法的。例如,求解最多可以放多少件物品或者最多可以裝滿多少揹包的空間。這都可以根據具體問題...