Skip to content

Commit

Permalink
Update 背包问题.md
Browse files Browse the repository at this point in the history
新增回退背包
  • Loading branch information
CurryWOE authored Oct 30, 2023
1 parent c0b4c83 commit c3cf47d
Showing 1 changed file with 7 additions and 9 deletions.
16 changes: 7 additions & 9 deletions docs/Dp/背包问题.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# 背包问题
a,b互质,不能表示的最大体积是ab-a-b
# 01背包
```cpp
struct obj
Expand Down Expand Up @@ -47,13 +49,9 @@ for (循环物品种类) {
套用多重背包代码;
}
```
# 大背包小重量物品
设w=背包原始容量,L=物品重量的LCM,W=物品重量的种类*L
# 超大背包小重量物品,无限背包
只需做容量 $min(背包原始容量,全部种类物品重量的LCM)$ 的背包,剩下全部贪心选性价比最高的

特别地,如果全部装得下,就直接输出答案

做法是第 $i$ 个物品留下 $min(cnt_i,\frac Li)$ 个,用来背包

没留下的物品贪心放容量 $max(0,w-L)$ 的背包,设占据了ans容量

留下的物品做 W 容量的背包,最后在容量 [0,w-ans] 取答案
如果其他种类物品总共用了LCM的倍数的体积,就可以换成性价比最高的
# 回退背包
背包本身不考虑顺序,可以当作要消除的物品是最后一个物品,逆向转移回去即可消除一个物品的影响(加号变减号,转移顺序相反)

0 comments on commit c3cf47d

Please sign in to comment.