Update 背包理论基础01背包-1.md

This commit is contained in:
MrYoungg
2024-07-10 11:21:38 +08:00
committed by GitHub
parent 4f9c8920ab
commit 354359409c

View File

@ -118,7 +118,7 @@ dp[0][j]i为0存放编号0的物品的时候各个容量的背包
代码初始化如下: 代码初始化如下:
``` ```CPP
for (int j = 0 ; j < weight[0]; j++) { // 当然这一步如果把dp数组预先初始化为0了这一步就可以省略但很多同学应该没有想清楚这一点。 for (int j = 0 ; j < weight[0]; j++) { // 当然这一步如果把dp数组预先初始化为0了这一步就可以省略但很多同学应该没有想清楚这一点。
dp[0][j] = 0; dp[0][j] = 0;
} }
@ -147,7 +147,7 @@ dp[0][j] 和 dp[i][0] 都已经初始化了,那么其他下标应该初始化
最后初始化代码如下: 最后初始化代码如下:
``` ```CPP
// 初始化 dp // 初始化 dp
vector<vector<int>> dp(weight.size(), vector<int>(bagweight + 1, 0)); vector<vector<int>> dp(weight.size(), vector<int>(bagweight + 1, 0));
for (int j = weight[0]; j <= bagweight; j++) { for (int j = weight[0]; j <= bagweight; j++) {
@ -171,7 +171,7 @@ for (int j = weight[0]; j <= bagweight; j++) {
那么我先给出先遍历物品,然后遍历背包重量的代码。 那么我先给出先遍历物品,然后遍历背包重量的代码。
``` ```CPP
// weight数组的大小 就是物品个数 // weight数组的大小 就是物品个数
for(int i = 1; i < weight.size(); i++) { // 遍历物品 for(int i = 1; i < weight.size(); i++) { // 遍历物品
for(int j = 0; j <= bagweight; j++) { // 遍历背包容量 for(int j = 0; j <= bagweight; j++) { // 遍历背包容量
@ -186,7 +186,7 @@ for(int i = 1; i < weight.size(); i++) { // 遍历物品
例如这样: 例如这样:
``` ```CPP
// weight数组的大小 就是物品个数 // weight数组的大小 就是物品个数
for(int j = 0; j <= bagweight; j++) { // 遍历背包容量 for(int j = 0; j <= bagweight; j++) { // 遍历背包容量
for(int i = 1; i < weight.size(); i++) { // 遍历物品 for(int i = 1; i < weight.size(); i++) { // 遍历物品
@ -232,7 +232,7 @@ dp[i-1][j]和dp[i - 1][j - weight[i]] 都在dp[i][j]的左上角方向(包括
主要就是自己没有动手推导一下dp数组的演变过程如果推导明白了代码写出来就算有问题只要把dp数组打印出来对比一下和自己推导的有什么差异很快就可以发现问题了。 主要就是自己没有动手推导一下dp数组的演变过程如果推导明白了代码写出来就算有问题只要把dp数组打印出来对比一下和自己推导的有什么差异很快就可以发现问题了。
```cpp ```CPP
void test_2_wei_bag_problem1() { void test_2_wei_bag_problem1() {
vector<int> weight = {1, 3, 4}; vector<int> weight = {1, 3, 4};
vector<int> value = {15, 20, 30}; vector<int> value = {15, 20, 30};