揹包 基礎 01,完全,組合

2022-10-04 03:21:08 字數 713 閱讀 4064

01揹包

有 n 件物品和乙個容量為 v的揹包。放入第 i件物品花費的費用是 c [ i ],得到的價值是 w [ i ] ,求將哪些物品裝入揹包可使價值總和最大。

​for (int i = 1; i <= n; i++)

for (int j = v; j >= c[i]; j--)

f[j] = max(f[j], f[j - c[i]] + w[i]);

完全揹包

有 n 種物品和乙個容量為 v的揹包,每種物品都有無限件可用。第 i 種物品的費用是 c [ i ] ,價值是 w [ i ]。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

for(int i=1;i<=n;++i){

for(int j=c[i];j<=v;++j){

f[j] = max(f[j],f[j-c[i]]+w[i]);

組合揹包

有 n 種物品和乙個容量為 v 的揹包。第 i 種物品最多有 p [ i ] 件可用,每件費用是 c [ i ] ,價值是 w [ i ] 。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

for(int i=1;i<=n;++i){

for(int j = v;j>=c[i];++j){

for(int k=1;k<=p[i];++k){

f[j] = max(f[j],f[j-c[i]*k]+w[i]*k);

01揹包,完全揹包

動態規劃 動態規劃的核心是狀態以及狀態轉移方程。需要定義乙個 i,j 狀態以及該狀態的指標函式d i,j 01揹包 有n種物品,每種只有乙個,第i件物品的體積為vi質量為wi。選一些物品裝到體積為c的揹包中,使其體積不超過c的前提下重量最大。namevw abcd e 子問題定義 dp i j 表示...

01揹包 完全揹包

本文主要使用一維陣列進行使用 意思 01揹包 代表物品只有兩種狀態,只能使用一次。如,dp i max dp i dp i wight j value j 代表容量為i所獲得的最大利潤。完全揹包 乙個物品可以使用無限次 技巧 1.如果是0 1揹包,即陣列中的元素不可重複使用,nums放在外迴圈,ta...

0 1揹包與完全揹包

現有 n 件物品,乙個最大容量為 w 的揹包。第 i 件物品重量為 wi 價值為 vi 已知對於一件物品,你必須選擇取或不取,且每件物品只能被取一次 這就是 0 1 的含義 求放置哪幾件物品進揹包,使得揹包中物品價值最大 或是求最大價值是多少等衍生問題 設 ans n,w 為當揹包容重量為 w 有 ...