0-1背包,完全背包,多重背包问题

    今天看到背包问题。特记录下整理下自己的理解。方便以后查阅自己算法的理解。

    看背包问题,主要是它是用到动态规划,动态规划是能把问题划分为子问题。也就是状态转移方程。更多了动态规划,查看其他的博客或者文档。

    问题描述:
一个背包的总容量为V,现在有N类物品,第i类物品的重量为weight[i],价值为value[i]
那么往该背包里装东西,怎样装才能使得最终包内物品的总价值最大。这里装物品主要由三种装法:
1、0-1背包:每类物品最多只能装一次
2、多重背包:每类物品都有个数限制,第i类物品最多可以装num[i]次
3、完全背包:每类物品可以无限次装进包内

     思考中,如果给你的是多个背包a,b,c,不固定容量,你怎么装才能最大化价值总和。思路是随即一个背包,然后根据上面的装法,计算这个背包的能装的最大值。装好后再选下一个背包,计算剩下的物品能装的最大值。直到装完所有背包为止。得到所有背包装的价值得总和。这个没有在代码中没有跑,如果是不同装包顺序下是否得到的最大价值都是一样的。

 

一、0—1背包

    假设我们用dp[N][V]表示,N个物品,容量V的总价值。则dp[i][j]表示前i个物品在容量为j的情况下,背包保存的物品价值总和的最大值。最终dp[N][V]为我们所求。

    我们考虑动态规划数据dp[i][j]的状态转移方程。有两种情况一种是背包不放第i个物品,一种是背包放第i个物品,计算两种情况哪一种总价值对大。得到最优解。  转移方程:dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i-1]] + value[i-1])

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值