Logo __vector__ 的博客

博客

编程兔 pj T3 题解

...
__vector__
2025-12-01 12:55:45

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2022-05-23 23:06:33

前言:

谢 lhx 大佬的思路

记录思路区:

可以使用分组背包,将 $a_i,0,-a_i$ 分成一个组 可以遍历 $-\sum a_i \rightarrow \sum a_i$ 的每个数,对其中每个数进行分组背包求解方案数。
由于遍历的过程复杂度是 $O(\sum a_i)$,对每个数分组背包求解方案数的过程是 $3 \cdot n = O(n)$ 的($3$ 是每个组的大小),所以总复杂度是 $O(n \cdot \sum a_i + q)$

UPD: 实际上上面的复杂度假了,因为分组背包的复杂度不是 $O(n)$,下面写上我的新想法:
和上面一样,仍然将 $a_i,0,-a_i$ 分成一个组,这样就有了 $n$ 个组,然后遍历这 $n$ 个组,对于每个组遍历 $\sum a_i \rightarrow -\sum a_i$(要凑成的数)计算方案数。
这样总复杂度是 $O(n \cdot \sum a_i + q)$
现在的瓶颈是我不会这种计算方案数类型的背包 dp。

做法

还没想好

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。