0-1背包问题

物品数量为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值