物品数量为10,背包容量为120,物品价值分别为:40 50 63 24 42 36 85 19 32 20;物品重量分别为: 12 15 20 24 15 16 11 9 8 14.
如何选择装入背包的物品,使装入的物品总价值最大。
分别给出对应装入背包里产品号product_N
装入产品后背包的总重量sum_W
装入产品后背包的总价值sum_V
部分代码如下:
v=[40 50 63 24 42 36 85 19 32 20];
w=[12 15 20 24 15 16 11 9 8 14];
m=zeros(10,121);%//建立二维数组
sum_W=0;
product_N=[];
%//i指第i个物体,j指背包容量
for j=0:120
if j>=w(1)
m(1,j+1)=v(1);
end
end%//初始化第一行,数组编码从1开始,因此下标要加1
for i=2:10
for j=1:120
if j>=w(i)%//背包可以装下当前物体
m(i,j+1)=max(m(i-1,j+1),m(i-1,j-w(i)+1)+v(i));%//1.不装 2.空出刚好可以放进去的容量
else
m(i,j+1)=m(i-1,j+1);%//容量不够不能装
end
end
end
sum_V=m(10,121);%//数组最后一行最后一列即为最大价值
x=zeros(1,10);%//布尔数组记录当前物体是否被装入
x(1)=1;
j=120;%//从最后一个数开始回溯
.......
运行结果为
编号为1 2 3 5 6 7 8 9 10
总量120
总价值387