|
|
|
@ -49,19 +49,13 @@ $−1≤s_i≤1000$
|
|
|
|
|
|
|
|
|
|
该题就是一道 **混合背包** 的裸题
|
|
|
|
|
|
|
|
|
|
* 将$01$背包看成是数量只有$1$个的多重背包问题。
|
|
|
|
|
* 完全背包也不是真正的无限个数,因为受背包容量的限制,它最多可以使用的个数是$s_i=m/v_i$个,也就转化为多重背包问题。
|
|
|
|
|
* 使用多重背包问题的二进制优化统一处理即可。
|
|
|
|
|
* ① 将$01$背包看成是数量只有$1$个的多重背包问题
|
|
|
|
|
* ② 完全背包也不是真正的无限个数,因为受背包容量的限制,它最多可以使用的个数是$s_i=m/v_i$个,也就转化为多重背包问题
|
|
|
|
|
|
|
|
|
|
<font color='red' size=5><b>总结</b></font>
|
|
|
|
|
- $01$背包是多重背包的特殊形式;
|
|
|
|
|
使用多重背包问题的二进制优化统一处理即可
|
|
|
|
|
|
|
|
|
|
- 完全背包在背包容量限制下,也是多重背包的特殊形式
|
|
|
|
|
|
|
|
|
|
- 之所以它们各自有各自的状态转移方程,是因为特殊形式时的状态转移方程更简单,但本质上符合多重背包状态转移方程。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 闫氏DP分析法
|
|
|
|
|
### 闫氏$ DP$分析法
|
|
|
|
|
<center><img src='https://cdn.acwing.com/media/article/image/2021/06/18/55909_0af30cf2cf-IMG_B5C67A3846AE-1.jpeg'></center>
|
|
|
|
|
|
|
|
|
|
### 一维数组解法 <font color='red' size=4><b>【推荐】</b></font>
|
|
|
|
@ -77,7 +71,7 @@ int idx;
|
|
|
|
|
|
|
|
|
|
struct Node {
|
|
|
|
|
int v, w;
|
|
|
|
|
} c[N * 12];
|
|
|
|
|
} c[N * 31];
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
cin >> n >> m;
|
|
|
|
@ -111,4 +105,5 @@ int main() {
|
|
|
|
|
printf("%d\n", f[m]);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|