背包九讲第一讲-简单的0/1背包问题有感1.1

背包问题的核心是一条状态转移方程:我用zone表示背包的最大空间

j=w[i];j<=zone;j++

dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);

在这里,dp是存储最大价值的数组,其中i代表,现在正在考虑第几个物品,要知道,我们前面的i-1个物品已经都求解完毕并且存储起来了。

w[i]对应了第i件物品的重量(容积),v[i]对应了第i件物品的价值

在这里我觉得大家可以考虑把一开始的w和v数组进行小小的处理,从i=1开始接收数据,这样子初学的话比较好理解,要不然因为数组都是从0开始的,写dp的时候还要转一下弯。。。。。。这是笨笨的我的一点小体会hh,如果觉得ok那也是可以的

初值那就是dp[0][0]~dp[0][zone],全部赋值为0,这个也是很好理解的,因为这个dp数组就是说,我们现在没有任何物品,所以说,背包里面对应任何空间的最大价值和都是0。

有趣的地方来了

转移状态的体现

接下来我们考虑的是i=1的情况,但是根据我们之前状态转移方程,我会知道,我们把现在的这个问题转移到了i-1=0,即第0个物品,我们已经考虑过的状态。

我们对于一件物品,肯定是有两种选择,取还是不取,

取的话对应了dp[i-1][j-w[i]]+v[i]

不取对应了dp[i-1][j]

it means,在现在这个同样的空间限制下,哪一种取法,最max,最好。这是子结构的最优解

后面的i=2,i=3......都是这样子,你发现了吗,我们把一个问题,拆开了很多个小部分,每个小部分,我们只考虑一件物品的情况。我觉得这是非常非常有意思的,也是非常巧妙的。

但是,我个人对于我现有的这份资料有一点保留。。。。。。

-----未完待续。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值