01背包

今天做了一个很简单的dp题目,发现自己没什么思路,经过百度指点才发现是完全背包。然后开始重新补习了一下背包,从01开始整理吧。

0,1背包是放与不放两种状态,于是称作01.


题目:

     有N件物品和一个容量为V的背包。放入第i件物品消耗的空间为Ci,得到的价值是Wi。求解将哪些物品放入背包可使价值总和最大。(blog主要给出求最大和的方法)


思路:

     F[i,v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。(前i件物品中可以含有不放入背包的)


     F[i,v] = max{F[i-1,v],F[i-1,v-Ci]+Wi}

     只考虑第i件物品,{1不放入,问题转化为:前i件物品放入容量为v的背包

                                   {2 放入,  问题转化为:前i-1件物品放入容量为v-Ci的背包中,再在背包中加入第i个物品,使得容量为v,且总价值+Wi

      下面贴出伪代码:

           

F[0,0...V]=0
for i=1 to N
    for v=Ci to V
        F[i,v] = max{F[i-1,v],F[i-1,V-Ci]+Wi}



此算法的时间复杂度为O(VN)

有将空间复杂度简化的方法,
    F[v] = max{F[v],F[v-Ci]+Wi}


下面贴出伪代码:
F[0...V] = 0
for i=1 to N
    for v=V to Ci
        F[v] = max{F[v],F[v-Ci]+Wi}


此处注意简化之后,第二层循环的顺序变为逆循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值