替换图片链接

This commit is contained in:
programmercarl
2025-03-17 15:52:23 +08:00
parent 91e7dab72c
commit 86a0208485
216 changed files with 813 additions and 813 deletions

View File

@@ -163,7 +163,7 @@ if (abs(target) > sum) return 0; // 此时没有方案
先只考虑物品0如图
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240808161747.png)
![](https://file.kamacoder.com/pics/20240808161747.png)
这里的所有物品都是题目中的数字1
@@ -177,7 +177,7 @@ if (abs(target) > sum) return 0; // 此时没有方案
接下来 考虑 物品0 和 物品1如图
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240808162052.png)
![](https://file.kamacoder.com/pics/20240808162052.png)
装满背包容量为0 的方法个数是1即 放0件物品。
@@ -191,7 +191,7 @@ if (abs(target) > sum) return 0; // 此时没有方案
接下来 考虑 物品0 、物品1 和 物品2 ,如图:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240808162533.png)
![](https://file.kamacoder.com/pics/20240808162533.png)
装满背包容量为0 的方法个数是1即 放0件物品。
@@ -207,17 +207,17 @@ if (abs(target) > sum) return 0; // 此时没有方案
如图红色部分:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240808163312.png)
![](https://file.kamacoder.com/pics/20240808163312.png)
dp[2][2] = 3即 放物品0 和 放物品1、放物品0 和 物品 2、放物品1 和 物品2 如图所示,三种方法:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240826111946.png)
![](https://file.kamacoder.com/pics/20240826111946.png)
**容量为2 的背包,如果不放 物品2 有几种方法呢**
有 dp[1][2] 种方法,即 背包容量为2只考虑物品0 和 物品1 ,有 dp[1][2] 种方法,如图:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240826112805.png)
![](https://file.kamacoder.com/pics/20240826112805.png)
**容量为2 的背包, 如果放 物品2 有几种方法呢**
@@ -229,7 +229,7 @@ dp[2][2] = 3即 放物品0 和 放物品1、放物品0 和 物品 2、放物
如图:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240826113043.png)
![](https://file.kamacoder.com/pics/20240826113043.png)
有录友可能疑惑,这里计算的是放满 容量为2的背包 有几种方法那物品2去哪了
@@ -239,7 +239,7 @@ dp[2][2] = 容量为2的背包不放物品2有几种方法 + 容量为2的背包
所以 dp[2][2] = dp[1][2] + dp[1][1] ,如图:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240826113258.png)
![](https://file.kamacoder.com/pics/20240826113258.png)
以上过程,抽象化如下:
@@ -266,11 +266,11 @@ else dp[i][j] = dp[i - 1][j] + dp[i - 1][j - nums[i]];
先明确递推的方向,如图,求解 dp[2][2] 是由 上方和左上方推出。
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240826115800.png)
![](https://file.kamacoder.com/pics/20240826115800.png)
那么二维数组的最上行 和 最左列一定要初始化,这是递推公式推导的基础,如图红色部分:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240827103507.png)
![](https://file.kamacoder.com/pics/20240827103507.png)
关于dp[0][0]的值在上面的递推公式讲解中已经讲过装满背包容量为0 的方法数量是1即 放0件物品。
@@ -323,7 +323,7 @@ for (int i = 0; i < nums.size(); i++) {
例如下图,如果上方没数值,左上方没数值,就无法推出 dp[2][2]。
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240827105427.png)
![](https://file.kamacoder.com/pics/20240827105427.png)
那么是先 从上到下 ,再从左到右遍历,例如这样:
@@ -349,11 +349,11 @@ for (int j = 0; j <= bagSize; j++) { // 列,遍历背包
这里我再画图讲一下以求dp[2][2]为例,当先从上到下,再从左到右遍历,矩阵是这样:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240827110933.png)
![](https://file.kamacoder.com/pics/20240827110933.png)
当先从左到右,再从上到下遍历,矩阵是这样:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240827111013.png)
![](https://file.kamacoder.com/pics/20240827111013.png)
这里大家可以看出,无论是以上哪种遍历,都不影响 dp[2][2]的求值,用来 推导 dp[2][2] 的数值都在。
@@ -366,7 +366,7 @@ bagSize = (target + sum) / 2 = (3 + 5) / 2 = 4
dp数组状态变化如下
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240827111612.png)
![](https://file.kamacoder.com/pics/20240827111612.png)
这么大的矩阵,我们是可以自己手动模拟出来的。
@@ -445,7 +445,7 @@ bagSize = (target + sum) / 2 = (3 + 5) / 2 = 4
dp数组状态变化如下
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20210125120743274.jpg)
![](https://file.kamacoder.com/pics/20210125120743274.jpg)
大家可以和 二维dp数组的打印结果做一下对比。