今天為大家講解完全揹包問題。
完全揹包和01揹包的區別便在於完全揹包可以無限選取商品,而01揹包只可以選取乙個,從一維陣列的角度來想,01揹包從後往前列舉(m到w[i])可以保證每次j空間時只選取該商品選取了一次,避免了重複;而完全揹包從前往後列舉(w[i]到m)會把小於m的2*w[i],3*w[i]...k*w[i]都加進來.
為大家放一道例題
題目描述
設有n種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為m,今從n種物品中選取若干件(同一種物品可以多次選取),使其重量的和小於等於m,而價值的和為最大。
輸入第一行:兩個整數,m(揹包容量,m<=200)和n(物品數量,n<=30);
第2..n+1行:每行二個整數wi,ci,表示每個物品的重量和價值。
輸出僅一行,乙個數,表示最大總價值。
樣例輸入
10 4樣例輸出2 13 3
4 57 9
max=12#include題解**:
using namespace std;
int m,n,dp[205],w[35],c[35];
int main()
for(int i=1;i<=n;i++)
}printf("max=%d",dp[m]);
return 0;
}
揹包九講之 完全揹包
完全揹包與01揹包的區別在於完全揹包第i件物品可以在允許範圍內選無數個,同樣的v i 表示體積,w i 表示價值。同樣的,我們先從二維入手,較為顯而易見。dp i j 表示前i件物品在容量為j的最大價值,那麼相應的也會出現很多情況 1.不選 dp i j dp i 1 j 2.選一件 dp i j ...
揹包問題之完全揹包
完全揹包 有n種物品,每種物品有無限個,每個物品的重量為w i 價值為v i 現在有乙個揹包,它所能容納的重量為c,問 你的揹包所能帶走的最大價值是多少?之前01揹包分析過了,如果是順序的話,就表示同一物品可以多次放入!這就是完全揹包!就是這麼神奇!1 include 2 3using namesp...
揹包問題(二) 完全揹包問題
繼0 1揹包問題後,本文介紹完全揹包問題 0 1揹包問題見 完全揹包問題與01揹包問題的區別在於每一件物品的數量都有無限個,而01揹包每件物品數量只有乙個。問題解法其實和01揹包問題一樣,只是初始化的值和遞推公式需要稍微變化一下。初始化時,當只考慮一件物品a時,f 1 j j weight a 遞推...