第一篇博客——关于01背包问题的学习整理

本文详细介绍了01背包问题的三种类型,并以LeetCode上的一个简单01背包问题为例,深入讲解了如何使用动态规划解决此类问题。通过回溯算法的暴力解法和二维DP数组的优化解法,阐述了动态规划的五部曲,包括明确DP数组含义、确定递推公式、初始化DP数组、确定遍历顺序以及状态推导。最后,给出了问题的代码实现和输出结果,帮助读者理解动态规划在解决背包问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于大厂面试而言,01背包主要考察两种背包:

1、01背包

n种物品,每种物品只有一个

2、 完全背包

n种物品,每种物品无限个

3、 多重背包

n种物品,每种物品个数各不相同

LeetCode上面没有纯粹的01背包问题,主要是背包问题的应用

下面给出一个简单的01背包问题的例子

重量 价值
物品0 1 15
物品1 3 20
物品2 4 30

其中,背包最大重量为4,可装满的最大价值为?

(1)考虑暴力解法

每个物品两个状态:取or不取

因此我们可以用 回溯算法 来枚举所有情况;时间复杂度O(2^n)【这个就涉及到学习回溯算法咯】

(2)二维dp数组解法

动态规划五部曲:

1、明确dp数组含义

        dp[i][j] :0 ~ i 之间的物品任取,放进容量为 的背包里的最大价值

2、确定递推公式

        思考:dp[i][j] 可由哪些状态推导而来?此题中,有两种状态:放物品i or 不放物品i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值