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{f[j],f[j-w[i]]+c[i]}
(w[i]<=j<=m)
若是多重背包,状态转移方程为:
f[k]=max{f[k],f[k-w[i]]+c[i]}
(1<=j<=p[j],m>=k>=w[i])
程序:
var
function max(x,y:longint):longint;
end;
begin
end.
这是一个关于背包问题的动态规划算法讨论,涉及背包体积V和N个物品,每个物品有各自的体积Vi、价值Wi和最大取件数Mi。目标是在不超过背包总容量的情况下,求解物品价值最大和。当Mi=1时为0/1背包,Mi>1时为多重背包,Mi=0表示数量无限。状态转移方程分别针对完全背包和多重背包进行描述。
569

被折叠的 条评论
为什么被折叠?



