DP合集 揹包 bound

2022-05-21 07:21:12 字數 805 閱讀 4256

n 種物品,第 i 種物品有 s i 個,單個重量為 w i ,單個價值為 v i 。現有乙個限重為 w 的揹包,求能容 納的物品的最大總價值。

輸入第一行二個整數 n , w ( n ≤ 1000 , m ≤ 10000) 。 

接下來 n 行,每行三個整數 s i,w i,v i ,描述一種物品。

輸出一行乙個整數,描述能容納的物品的最大總價值。保證答案不會超過231−

1'>231−1

231−1 。231

−1'>題解:

單個單個列舉會超時,所以可以用二進位制優化,就是因為如果我們可以將任意乙個十進位制數化成二進數,所以我可以把n個一樣的揹包,拆成二進位制數上對於1的數的數量個揹包,所以就把n個揹包合併成logn個大揹包,如果還不會可以參考acm p217。

**

#include#include

#include

#include

#include

using

namespace

std;

int dp[100000],v[100000],w[10000],len=0;

void

cl()

intmain()

if(s)

}dp[

0]=0

;

for(int i=1;i<=len;i++)

for(int j=m;j>=w[i];j--)

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

printf("%d

",dp[m]);

}

揹包 DP 揹包

揹包 題目 是dp中較為常見的題目 分為 0 1 揹包 完全揹包 和多重揹包 這三類 是越來越深入的首先來介紹一下 0 1揹包 首先 0 1 揹包的含義是 給你乙個容量位m的揹包 然後給你n個物品 每個物品具有一定價值和一定重量 會站一定的揹包空間 答案是在n個物品中那幾個 然後使得到的價值最大 首...

揹包dp之01揹包

現在我們有n個配件,他們有不同的價值.但是我們揹包的容量是有限的,因為我們只有乙個一級包,所以我們最多可以裝v重量的東西.但是為了能更好的吃到雞 不存在的 我們要攜帶更有價值的配件,請問我們最多能拿多少價值的配件來當快遞員呢?輸入的第一行是t,表示有一共要打t場比賽.每組資料由三行組成.第一行包含兩...

dp 揹包之多重揹包

問題 多重揹包也是 0 1 揹包的乙個變式。與 0 1 揹包的區別在於每種物品有ki個,而非乙個。解決方案 將k個相同的物品,看作k個不同的物品,但是wi,ci都一樣。即可套用 01揹包方案 詳見 優化方法 二進位制優化 設k個物品分成 a xx a xx 1 a xx k 1 個物品。那麼 a x...