1/*2即物品間存在依賴,比如i依賴於j,表示若選物品i,則必須選物品j
34有很多個箱子,想買箱子中的物品必須先買下箱子,典型的依賴揹包
5將不依賴其他物品的物品稱為主件,依賴其他物品的物品稱為附件
6我們有n個箱子,箱子裡面的物品個數為cnt[i]
7那麼箱子稱為主件,箱子裡面的物品稱為附件
8那麼考慮乙個主件和它附件的集合,那麼有2^n+1種策略,每種策略都是互斥的。所以它是分組揹包問題。
9但是不能像一般的分組揹包那樣處理,因為組內有2^n+1種。
10但是考慮到費用相同時,只選擇價值最大的。所以可以對組內的附件進行01揹包,得到費用依次為v-c[i]...0的最大價值
11dp2[v-c[i]...0]
1213
*/14 #include 15 #include
16int dp[100000+10],dp2[100000+10
];17
int box[55],cnt[55],price[55][11],value[55][11
];18 inline int max(const
int &a, const
int &b)
1922
intmain()
2338
for(k=box[i];k<=v; ++k)
39 dp[k] = max(dp[k],dp2[k-box[i]]);//
當容量為k時,取第i組的物品時得到的最大值和不取比較哪個大40}
41 printf("
%d\n
",dp[v]);42}
43return0;
44 }
c 揹包九講之有依賴的揹包問題
一 揹包九講總述 關於動態規劃問題,最典型的就是揹包九講,先理解揹包九講後再總結關於動態規劃的問題。二 有依賴的揹包問題這個問題理解起來挺簡單吧,就是如果買一件物品 附件 就必須買另一件 主件 這裡為了簡化問題,就假設主件不依賴另乙個物品,附件不被另乙個物品依賴,沒有某件物品同時依賴多件物品。不知道...
揹包九講 01揹包問題
1 01揹包問題描述 已知 有 n 件物品和乙個容量為 v 的揹包。第i件物品的重量為w i 得到的價值是 c i 問題 求解將哪些物品裝入揹包可使價值總和最大。條件 每種物品只有一件,可以選擇放或者不放 2 基本思路 01揹包的特點 每種物品只有一件,可以選擇放或者不放 子問題定義狀態f i v ...
揹包問題模板(揹包九講)
題目 有 n 件物品和乙個容量為 v 的揹包。第 i 件物品的體積 費用 是 c i 價值是 w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。如下 一維陣列 include include include using namespace std define m ...