description
揹包體積為v ,給出n個物品,每個物品占用體積為vi,價值為wi,每個物品要麼至多取1件,要麼至多取mi件(mi > 1) , 要麼數量無限 , 在所裝物品總體積不超過v的前提下所裝物品的價值的和的最大值是多少?
input
第一行兩個數v,n下面n行每行三個數vi,wi,mi表示每個物品的體積,價值與數量,mi=1表示至多取一件,mi>1表示至多取mi件,mi=0表示數量無限
output
1個數ans表示所裝物品價值的最大值
sample input
10 3
2 1 0
3 3 1
4 5 4
sample output
11
解題思路:f[j]表示一定種類物品在容量為j的揹包裡的最大價值,根據題意分別處理,迴圈為:1<=i<=n若是完全揹包,狀態轉移方程為:
f[j]=max
(w[i]<=j<=m)
若是多重揹包,狀態轉移方程為:
f[k]=max
(1<=j<=p[j],m>=k>=w[i])
程式:var
n,m,i,j,k:longint;
w,c,p:array[0..30]of longint;
f:array[0..200]of longint;
function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end;
begin
readln(m,n);
for i:=1 to n do
readln(w[i],c[i],p[i]);
for i:=1 to n do
if p[i]=0 then
begin
for j:=w[i] to m do
f[j]:=max(f[j],f[j-w[i]]+c[i]);
endelse
begin
for j:=1 to p[i] do
for k:=m downto w[i] do
f[k]:=max(f[k],f[k-w[i]]+c[i]);
end;
writeln(f[m]);
end.
版權屬於: chris
動態規劃之揹包九講之四 混合揹包
題目 有 n 種物品和乙個容量是 v 的揹包。物品一共有三類 第一類物品只能用1次 01揹包 第二類物品可以用無限次 完全揹包 第三類物品最多只能用 si 次 多重揹包 每種體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第...
動態規劃 揹包
揹包經典問題 揹包問題01 乙個揹包容積為t 0 t 2000 現在有n 0 如下 includeusing namespace std int s 1005 bool f 3000 int main 揹包問題02 若每種物品有無限多個。從這n種物品中選取若干個裝入揹包內,使揹包所剩的空間最小。請求...
揹包(動態規劃)
一 01揹包問題 特點 每件物品僅有一件,可以選擇放與不放 有件物品和乙個容量為 的揹包。第 件物品的費用是 價值是 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。用子問題定義狀態 f i v max f i 1 v f i 1 v c i w i 注意有意義當且僅當存...