Merge pull request #409 from KelvinG-611/背包理论基础01背包-2

修改 背包理论基础01背包2, 增加python实现代码.
This commit is contained in:
程序员Carl
2021-06-19 19:20:43 +08:00
committed by GitHub

View File

@ -5,6 +5,7 @@
<a href="https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ"><img src="https://img.shields.io/badge/知识星球-代码随想录-blue" alt=""></a>
</p>
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
# 动态规划关于01背包问题你该了解这些滚动数组
昨天[动态规划关于01背包问题你该了解这些](https://mp.weixin.qq.com/s/FwIiPPmR18_AJO5eiidT6w)中是用二维dp数组来讲解01背包。
@ -35,7 +36,7 @@
**其实可以发现如果把dp[i - 1]那一层拷贝到dp[i]上表达式完全可以是dp[i][j] = max(dp[i][j], dp[i][j - weight[i]] + value[i]);**
**其把dp[i - 1]这一层拷贝到dp[i]上,不如只用一个一维数组了**只用dp[j](一维数组,也可以理解是一个滚动数组)。
**其把dp[i - 1]这一层拷贝到dp[i]上,不如只用一个一维数组了**只用dp[j](一维数组,也可以理解是一个滚动数组)。
这就是滚动数组的由来,需要满足的条件是上一层可以重复利用,直接拷贝到当前层。
@ -214,7 +215,7 @@ int main() {
Java
```java
public static void main(String[] args) {
public static void main(String[] args) {
int[] weight = {1, 3, 4};
int[] value = {15, 20, 30};
int bagWight = 4;
@ -242,7 +243,24 @@ Java
Python
```python
def test_1_wei_bag_problem():
weight = [1, 3, 4]
value = [15, 20, 30]
bag_weight = 4
# 初始化: 全为0
dp = [0] * (bag_weight + 1)
# 先遍历物品, 再遍历背包容量
for i in range(len(weight)):
for j in range(bag_weight, weight[i] - 1, -1):
# 递归公式
dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
print(dp)
test_1_wei_bag_problem()
```
Go
```go