动态规划--01背包问题

背包问题

背包问题是动态规划的经典问题之一。背包问题指在一有容积或重量限制的背包中放入物品,物品有体积、重量、价值等属性,要求在满足背包限的情况下放置物品,使背包中物品的价值之和最大。根据物品限制条件的不同,背包问题可为01背包问题、完全背包问题、多重背包问题、分组背包问题和混合背包问题等。今天的博客就来了解一下01背包

01背包

给定n种物品,每种物品都有重量wᵢ和价值vᵢ,每种物品都只有一个。另外,背包容量为vᵢ,wᵢ。求解在不超过背包容量的情况下将哪些物品放入背包,才可以使背包中的物品价值之和最大。

分析

每种物品只有一个,要么不放入,要么放入。
假设第i阶段表示处理第i种物品,第i-1阶段表示处理第i-1种物品,则当处理第i种物品时,前i-1种物品已处理完毕,只需考虑第i-1阶段向第i阶段的转移。
状态表示:c[i][j]表示将前i种物品放入容量为j的背包中获得的最大价值。
第i种物品的处理状态包括以下两种:

·不放入:放入背包的价值不增加,问题转化为“将前i-1种物品放入容量为j的背包中获得的最大价”,最大价值为c[i-1][j]。
·放入:在第i种物品放入之前为第i-1阶段,相当于从第i-1阶段向第i阶段转化。问题转化为“将前i-1种物品放入容量为j-w[i]的背包中获得的最大价值”,此时获得的最大价值就是c[i-1][i-w[i],再加上放入第i种物品获得的价值v[i],总价值为c[i-1][j-w[i]+v[i]]

算法步骤

初始化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值