算法.动态规划.背包问题(完全背包,01背包,多重背包,多维背包,刚好装满)

本文深入探讨了背包问题的动态规划解决方案,包括完全背包和01背包问题。通过实例展示了如何使用Java实现这两种背包问题的递归解法。动态规划策略是F(n) = F(n-1) + K,通过遍历所有物品选择最优解。文章还区分了多重背包、多维背包和恰好装满背包的特性,并提供了各种背包问题的转换和实现方式。
摘要由CSDN通过智能技术生成

这节是总结和类比,如果看着比较笼统,请先自己编码实现完全背包和01背包代码,参考:

算法.动态规划.完全背包问题 (Java,递归)_要钱也要自我实现-CSDN博客01背包问题 钱币最少https://blog.csdn.net/weixin_42754896/article/details/123068850?spm=1001.2014.3001.5501算法.动态规划.完全背包问题 (Java,递归)_要钱也要自我实现-CSDN博客01背包问题 钱币最少https://blog.csdn.net/weixin_42754896/article/details/123068850?spm=1001.2014.3001.5501

什么是背包问题

有这么一个包包,要装最大价值的东西,重量需要在包包的承受范围内

动态规划

动态规划是解决背包问题的思路: F(n) = F(n-1) + K

第一步有N中选择,遍历这N中选择,选一个最优的解

类比

东西编号 :   D1  D2  D3  D4
体积W  :   2   3   4   5
价值V  :   3   4   5   6
东西个数:
完全背包:  ∞   ∞   ∞   ∞
01背包 :    1   1   1   1
多重背包:  n1  n2  n3  n4
多维背包:  W1  W2  W3  W4 (重量,体积+重量限制)
恰好装满: 最后剩余体积必须 =0 才可以
背包体积W:8

1. 01背包/多重背包 = 完全背包 + 东西个数限制

2. 多维背包: 多维控制条件,比如:体积,重量  同时限制 背包可以拿多少东西。

3. 多重背包 = N * D1  可以化解为 :01背包=D1  D1  D1 …… (N个)

4. 恰好装满: 体积最后需要剩余为0才可以,这种也可以在凑钱中限制,凑100块就必须凑够,否则少给你你也不干呀。 

实现对比

1. 最容易理解的实现是  迭代

2. 如果东西太多迭代代价太大, 可以转为循环实现,但思想不变


参考文档

动态规划之背包问题系列 - 知乎

【算法总结】动态规划-背包问题 - 郭怡柔 - 博客园

什么是动态规划(Dynamic Programming)?动态规划的意义是什么? - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值