題意
設有n 種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為m,今從n 種物品中選取若干件(同一種物品可以多次選取),使其重量的和小於等於m,而價值的和為最大。 分析
f[j]:=max(f[j],f[j-w[i]]+p[i];
最大價值=f[m];
varw,p:array[0..30]of longint;
f:array[0..300]of longint;
n,m,i,j:longint;
begin
readln(m,n);
for i:=1 to n do
readln(w[i],p[i]);
fillchar(f,sizeof(f),0);
for i:=1 to n do
begin
for j:=0 to m do
begin
if (j>=w[i]) then
if f[j]>f[j-w[i]]+p[i] then f[j]:=f[j] else f[j]:=f[j-w[i]]+p[i];
end;
end;
write(f[m]);
end.
完全揹包問題(一維陣列優化)
問題描述 有n件物品和乙個容量是v的揹包。每件物品都有無限件可用。第i件物品的體積是vi,價值是wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸入格式 第一行兩個整數n v,用空格隔開,分別表示物品數量和揹包容積。接下來有n行,每行兩個整數vi,wi,用空格隔開,分...
01揹包與完全揹包一維陣列的對比
在這我就廢話少說,直接貼上 供我們來比較一下啊。一 宣告乙個 大小為 dp c 的二維陣列,表示 面對於前i個物品,能獲得的最大容量 也可以看成從前往後推 那麼我們可以很容易找出它的 狀態轉移方程 dp c max dp c dp j w i v i j w i for int i 1 i n i ...
01揹包和完全揹包一維陣列遍歷區別
我們先來討論 01揹包 先看一下二維陣列的遍歷 f i j 表示前i件物品,在容量不超過j的情況下的最大權值 n 表示種類,t 表示 容量 w maxn 表示重量,v maxn 表示價值 for i 1 i n i for j w i j t j dp i j max dp i 1 j dp i 1...