背包问题以及动态规划复习

背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。
一个背包的总容量为V,现在有N类物品,第i类物品的重量为weight[i],价值为value[i]
那么往该背包里装东西,怎样装才能使得最终包内物品的总价值最大。这里装物品主要由三种装法:
1、0-1背包:每类物品最多只能装一次
2、多重背包:每类物品都有个数限制,第i类物品最多可以装num[i]次
3、完全背包:每类物品可以无限次装进包内

我们有n种物品,物品j的重量为wj,价格为pj

我们假定所有物品的重量和价格都是非负的。背包所能承受的最大重量为W

可以用公式表示为:

如果限定物品j最多只能选择bj个,则问题称为有界背包问题。

可以用公式表示为:

如果不限定每种物品的数量,则问题称为无界背包问题。

各类复杂的背包问题总可以变换为简单的0-1背包问题进行求解。 

无界背包问题例题见收藏

动态规划建模关键设置好以下变量:

  1. 阶段:第k阶段装载k种物品
  2. 状态变量xk:第k次装载时背包还可以装载的容量,0≤xk≤W
  3. 决策变量dk:第k次装载k种物品的数量
  4. 决策变量允许集合:Dk(xk)  0≤dk≤xk/wk
  5. 状态转移方程: xk+1=xk-dk*wk
  6. 阶段指标:vk=ck*dk
  7. 递推方程:fk(xk)(理解成每阶段最优收益函数)=max{ck*dk + fk+1(xk+1)}
  8. 边界条件:fn+1(xn+1)=0

思想:本阶段的决策会影响到下个阶段的状态变量,下一阶段的状态变量及对应的最优决策都已经求得,因此只用考虑本阶段状态根据指标函数确定最优决策

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值