完全揹包 一維陣列

2021-07-27 17:39:26 字數 615 閱讀 4082

題意

設有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...