Unverified Commit c5263636 authored by ir1d's avatar ir1d Committed by GitHub
Browse files

调整一下语序

parent 4e359e6a
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -23,7 +23,10 @@ $$
f_{i,j}=\max(f_{i-1,j},f_{i-1,j-w_{i}}+v_{i})
$$

在程序实现的时候,由于对当前状态有影响的只有 $f_{i-1}$ ,故可以去掉第一维,直接用 $f_{i}$ 来表示处理到当前物品时背包容量为 $i$ 的最大价值,得出以下方程:

这里如果直接采用二维数组对状态进行记录,会出现 MLE。可以考虑改用滚动数组的形式来优化。

当然,不难发现对当前状态有影响的只有 $f_{i-1}$ ,故其实可以去掉第一维,直接用 $f_{i}$ 来表示处理到当前物品时背包容量为 $i$ 的最大价值,得出以下方程:

$$
f_i=\max \left(f_i,f_{i-w_i}+v_i\right)
@@ -70,10 +73,6 @@ for (int i = 1; i <= n; i++)
    }
    ```

### 为什么不用记忆化搜索

是不是看着这个题目和前面的记忆化搜索很相似,前面是总采药时间,这里是总背包大小,前面是每种药的采集时间,这里是每个物品的体积,所以采用二维数组进行记录,然后会 MLE, **因为这里可以滚动数组** (见上面的例题代码)

## 完全背包

完全背包模型与 0-1 背包类似,与 0-1 背包的区别仅在于一个物品可以选取无限次,而非仅能选取一次。