editorial - subset sum
subset sum 题解
Subtask 1
因为 \(c\le 5000\),输出 \(c\) 个 \(w\) 即可。
Subtask 2
考虑让本质不同的方案尽可能少,比如只有两种。(Subtask 1 中只需一种)
当 \(w\) 为偶数时,任意两个 \(w/2\) 可以凑成一个 \(w\)。那么,如果总共放 \(a\) 个 \(w/2\),就能贡献 \(\dbinom{a}{2}\) 种方案。这时余下还需要的方案不会太多,沿用 Subtask 1 的做法,再放上 \(c-\dbinom{a}{2}\) 个 \(w\) 即可。
通过计算可以发现 \(c\le 3\times 10^6\) 时,这种做法最多使用不超过 \(4900\) 个物品。
那么,\(w\) 是奇数怎么办呢?可以发现加一个 \(1\) 就能(大部分情况下)不影响答案地归约到 \(w-1\) 的情况,因为如果不选这个 \(1\),只用两个 \((w-1)/2\) 是凑不出 \(w\) 的。
这种做法只在 \(w=3\) 时会出问题。特判它,枚举放了 \(a\) 个 \(1\),\(b\) 个 \(2\),那么就有 \(\dbinom{a}{3}+ab\) 种方案,挑一个跟 \(c\) 最接近的就行。通过计算,可以发现这样做用的物品数只有 \(\displaystyle O\left(\sqrt[3] c\right)\),并不影响大局。
Subtask 3
做法很多。比较容易从 Subtask 2 想到的是这种。
结合 \(w=3\) 时的做法和 \(w\) 是奇数的处理方法,当 \(w\bmod 3=0\) 时沿用 \(w=3\) 的做法,把 \(1,2,3\) 分别改为 \(w/3,2w/3,w\) 就行;否则先放一个 \(w\bmod 3\),再按照 \(w\bmod 3\) 的做法处理。
这个做法需要特判掉 \(w=4,5,8\) 的情况。
\(w=4,5\) 时本质不同的方案很少,把式子列出来然后枚举就行。\(8\) 是 \(4\) 的倍数,完全可以利用 \(w=4\) 的做法。
这个做法最多需要 \(4543\) 个物品,可以通过本题。
Subtask 3 的瓶颈在于 \(w=3\),然而 \(w=3\) 的情况其实已经是不可改进的了。
可以发现,这个问题中最难的部分是 \(w\) 比较小的情况。

浙公网安备 33010602011771号