k 卷积背包要 mod 多少?
问题是每个物品有 \(0,1,2,...,k-1\) k 种重量,对应 \(w_0,w_1...w_{k-1}\) \(k\) 种价值,有 若干个物品,求每个重量下的最大价值。(\(k\) 很小)
https://www.cnblogs.com/pp-orange/p/18764088 这是 3 卷积背包。
实质上这个方法还可以扩展到 \(k\) 卷积背包,对于 \(k+1\) 卷积背包我们只要 \(\bmod lcm(1,2,...,k)\) 就行了。
我们先申明两个引理:
引理1:对于 \(a\ge m\) 个非零的 \(\bmod m\) 下的数,必有一个子集的和 \(\mod m\) 为 \(0\)。
(过于显然)
引理2:对于任意 \(a\) 个非零的 \(\bmod m\) 下的数,且和为 \(0\),必可以分成若干集合,每个子集的和 \(\mod m\) 为 \(0\),且每个集合大小 \(\le m\)。
(使用引理 1 归纳即可证明)
对于原问题,我们尝试使用加强归纳法。把命题加强成:对于集合 \(S\),\(\forall x\in S,x\mid M\) 且 \(\sum x = M\times 2\),则一定存在一个子集的和为 \(M\)。
当 \(M=1\) 时显然正确,如果对于 \(M<a\) 命题成立,考虑 \(M=a\) 时。
不妨取 \(a\) 的一个素因子 \(p\),记 \(a=bp\),所以有 \(b<a\),我们如果能将 \(S\) 中的元素分为若干组,每组和 \(\le a\) 且是 \(p\) 的倍数,那么每组只保留它的 \(\frac{sum}{p}\) ,就可以归纳到 \(M=b\) 的子问题。
我们对于所有 \(x\in S\) 分类讨论:
)\(x\mid p\),\(x\) 单独分一组
)否则,我们有 \(x\le b\),我们一定可以找到若干组 \(\le p\) 大小的子集和是 \(p\) 的倍数(引理2)
于是我们就证明了!
同时我们另一方面,\(lcm(1,2,...,k)\) 是满足这个满足每个同余类是凸的最小值。因为对于一个 \(m\),如果存在 \(x\) 不整除 \(m\),我们放 \(\left \lfloor \frac{m}{x} \right \rfloor\) 个 \(x\),然后放一个 \(m\bmod x\) 就是反例。
upd : 0312 疑似伪证,目前最好的界是 k! 级别的。

浙公网安备 33010602011771号