动态规划01背包

目录01背包问题简介详细说明状态转移方程详解举例代码块测试结果01背包问题简介0-1背包问题:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。因此,该问题称为0-1背包
摘要由CSDN通过智能技术生成

目录

  1. 01背包问题简介
  2. 详细说明
  3. 状态转移方程详解
  4. 举例
  5. 代码块
  6. 测试结果

01背包问题简介

0-1背包问题:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?
在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。因此,该问题称为0-1背包问题。


详细说明

01背包的状态转换方程 c[i,j] = max{ c[i-1,j-w[i]]+p[i]( j >= w[i] ), c[i-1,j] }
c[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。


问题分析:令c(i,j)表示在前i(1<=i<=n)个物品中能够装入容量为就j(1<=j<=C)的背包中的物品的最大价值,则可以得到如下的动态规划函数:

(1)

  1. c(i,0)=c(0,j)=0

(2)

  1. c(i,j)=c(i-1,j) (j小于wi)
  2. c(i,j)=max{c(i-1,j) ,c(i-1,j-wi)+pi) } ( j>wi)

(1)式表明:如果第i个物品的重量大于背包的容量,则装入前i个物品得到的最大价值和装入前i-1个物品得到的最大价都是相同的,即物品i不能装入背包。c(i,0)=c(0,j)=0表示第i个物体装入容量为0的背包或者第0个物体装入容量为j的背包的价值都是0
(2)式表明,如果第i个物品的质量小于背包的容量,则会有一下两种情况:

(a). 如果把i个物品装入背包,则背包物品的价值等于第i-1个物品装入容量为j-wi的背包中的价值加上第i个物品的价值p。

(b).如果第i个物品没有装入背包,则背包中物品的价值就等于把前i-1个物品装入容量为j放入背包中所取得的价值。显然取2者中价值最大的作为前i个物品物品装入容量为j放入背包中的最优值。


状态方程详解

由表达式中各个符号的具体含义可得:

w[i]:第i个物体的重量

p[i]:第i个物体的价值

c[i][j]:第i个物体放入容量为j的背包的最大价值

c[i-1][j]:前i-1个物体放入容量为j的背包的最大价值

c[i-1][m-w[i]]:前i-1个物体放入容量为m-w[i]的背包的最大价值

因此状态方程:c[i][j]= max{c[i-1][j],c[i-1][j-w[i]]+p[i]}
解释:第一种是第i件放不进去,这时所得价值为c[i-1][j];第二种是第i件放进去,这时所得价值为c[i-1][j-w[i]](第二种是什么意思?就是如果第i件放进去,那么容量j-w[i]里就要放

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值