算法笔记-动态规划-1(01背包)
01背包
问题介绍
标准的01背包问题是指,有n(int型)个物品和最多装重量W(int型)的背包。weight数组表示物品的重量,即weight[i]表示第i个物品的重量;value数组表示物品的价值,即value[i]表示第i个物品的价值。问把哪些物品装入背包使得物品价值总和最大,每个物品只能装一次。
举例1,假设背包重量为4,物品信息由表格描述:
重量 | 价值 | |
---|---|---|
物品0 | 1 | 15 |
物品1 | 3 | 20 |
物品2 | 4 | 30 |
问题转化
如果遇到的问题符合01背包的特点,可以思考是否能转化为01背包问题
- 每个物品(元素)只能使用一次
- 背包刚好装满
- 放入的物品(元素)重量为元素的数值,价值也为元素的数值
求解方法
回溯法
每个物品要么取,要么不取,用回溯法搜索所有情况,时间复杂度O(2^n)
动态规划
用动态规划方法,以五个步骤来解决问题。以下都是针对例子1用二维dp数组描述
第一步确定dp数组含义
dp数组如图所示
dp[i][j]表示从