完全背包:二维数组
題意
設有n 種物品,每種物品有一個重量及一個價值。但每種物品的數量是無限的,同時有一個背包,最大載重量為M,今從n 種物品中選取若干件(同一種物品可以多次選取),使其重量的和小于等于M,而價值的和為最大。
分析
公式:f[i,j]:=max(f[i-1,j],f[i,j-w[i]]+p[i];
? ? ? 最大價值=f[n,m]
var
w,p:array[0..30]of longint;
f:array[0..40,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[i-1,j]>f[i,j-w[i]]+p[i] then f[i,j]:=f[i-1,j] else f[i,j]:=f[i,j-w[i]]+p[i];
? ? ? ? end;
? ? end;
? ? write(f[n,m]);
end.
轉載于:https://www.cnblogs.com/YYC-0304/p/9500174.html
總結