From c3cf47d9fba1895abb696b4cb0f263c7be39788e Mon Sep 17 00:00:00 2001 From: CurryWOE <76390659+CurryWOE@users.noreply.github.com> Date: Mon, 30 Oct 2023 17:55:05 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E8=83=8C=E5=8C=85=E9=97=AE=E9=A2=98.m?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增回退背包 --- ...3\214\345\214\205\351\227\256\351\242\230.md" | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git "a/docs/Dp/\350\203\214\345\214\205\351\227\256\351\242\230.md" "b/docs/Dp/\350\203\214\345\214\205\351\227\256\351\242\230.md" index 73c4e97e4..d1c98f9a3 100644 --- "a/docs/Dp/\350\203\214\345\214\205\351\227\256\351\242\230.md" +++ "b/docs/Dp/\350\203\214\345\214\205\351\227\256\351\242\230.md" @@ -1,3 +1,5 @@ +# 背包问题 +a,b互质,不能表示的最大体积是ab-a-b # 01背包 ```cpp struct obj @@ -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的倍数的体积,就可以换成性价比最高的 +# 回退背包 +背包本身不考虑顺序,可以当作要消除的物品是最后一个物品,逆向转移回去即可消除一个物品的影响(加号变减号,转移顺序相反)