背包总结:01背包,完全背包,多重背包

这篇博客详细介绍了背包问题的三种类型:01背包、完全背包和多重背包。内容包括每种背包的定义、解题思路、递推公式、初始化方法以及遍历顺序。通过具体的例子展示了如何解决装满背包的问题,包括最大价值、最少物品个数等,并提到了如何将多重背包转化为01背包问题。
摘要由CSDN通过智能技术生成

不同背包定义

01背包:每个物品数量唯一
完全背包:每个物品数量无限
多重背包:不同物品数量不同

解题思路

  1. 确定是否为背包问题,即有物品重量,价值,背包容量
  2. 确定背包容量,每个 物品的重量,价值
  3. 确定 物品数量/背包类型 为 1(01背包)、无限(完全背包)
  4. 确定题目问题,找到对应递推公式,初始化、确定遍历顺序
  5. 特判

递推公式

  • 能否装满背包(最多能装多少):dp[j] = max(dp[j],dp[j-nuims[i]]+nums[i])
    如:石头碰撞(最后剩下石头数),分割等和子集(分割两个子串使其值尽量相等)
  • 装满背包有多少种方法:dp[j] += dp[j-nums[i]]
    如:目标和(组成指定目标和有多少种方法) , 零钱兑换II(无限个硬币,组成目标值的方法数)
  • 背包装满的最大价值:dp[j] = max(dp[j],dp[j-weight[i]]+value[i])
    如:最原始的01背包,0和1(通过01组成的最大子集大小)
  • 装满背包的所有物品最小个数:dp[j] = min(dp[j],dp[j-coins[i]]+1)
    如:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值