0-1背包问题

问题描述

       有n个物品,每个物品都有各自的体积和价值,现有给定容量的背包,如何装物品使背包里的物品具有最大的价值总和? 

动态规划原理

假设此时有4个物品,背包的容量为8

number = 4,capacity = 8

每个物品的体积和价值如下:

i1234
体积(w)2345
价值(v)3465

动态规划主要要搞清楚的两个问题 1.状态表示,即 f [ i , j ] 表示的含义以及它如何表示  2.状态计算

现在我们来搞清楚第一个问题,状态表示,首先,i代表背包只能从前i 个中选择,j代表背包的容量,将 f [ i , j ]看作是一个集合,这个集合中包含了在背包容量不大于j,前i个物品中的所有选法。将这个集合分类,可以分为包括第i个物品的集合与不包含第i个物品的集合,不包含第i个物品也就相当于f [ i - 1, j ],包含第i个物品的集合又该怎么求呢?我们先将第i个物品去掉,在加上它的价值,也就是 f[ i - 1, j - w(i)] + v(i),此时也就是计算f [ i - 1, j - w(i)]这个集合的值加上第i个物品的价值。

状态计算:f [ i , j ] = max( f [ i - 1,j ] , f[ i - 1 , j - w(i)] +v(i)) ,得出这个状态转移式子,我们就可以计算粗每个集合的最大值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值