题解

cookiebus 2024-04-03 11:11:28 2024-04-03 11:12:02 6 返回题目

注意到 很小,应该是状压DP

记原集合为 ,目标集合为,如果我们能把 S 分成 个不相交的非空子集,且这 个子集能和 中的一些不相交非空子集的和相等,那么最终答案就是 ,其中

因此我们要最大化 x ,这就是DP的目标了

表示 S 的子集 x 和 T 的子集,sum 相等的最多能配几对

,枚举删去 x 或 y 的一个元素

,情况看起来复杂了

为了转移,我们似乎要再枚举子集,复杂度不能接受

但是这样想,既然 ,那么x和y至少配成了一对,若在其中删去一个元素,一定会减少一对

因此

这样省去了枚举子集,复杂度有保障

最终复杂度

如何统计 ?

以前一直写

for(int S=0;S<(1<<n);S++)
    for(int i=0;i<n;i++)
        if(S&(1<<i))sum[S]+=a[i];
{{ vote && vote.total.up }}