其他分享
首页 > 其他分享> > ARC100E口胡

ARC100E口胡

作者:互联网

垃圾 \(O(3^n)\) 做法/kk

对于每个 \(k\) 分别计算答案,注意到 \(i\) 一定是 \(k\) 的子集所以先枚举一个 \(i\),此时 \(j\) 应该是被钦定 \(i\) 为 \(1\) 的部分为 \(0\),剩下 \(k\) 的子集部分可以随意取 \(0/1\)。

于是弄一个类似前缀和的东西 \(f[S]\),\(S\) 的第 \(i\) 位为 \(0/1/2\) 表示这一位被 钦定为 \(0/1\)/都可以,这个东西随便转移一下就好了,容易发现复杂度为 \(O(3^n)\)。

总复杂度 \(O(3^n)\),被 \(O(n2^n)\) 吊起来锤/kk

容易发现这个东西是非常容易被薄纱的,来考虑一个很神奇的性质:

若 \(i|j\subseteq k\),那么 \(i|j\leq k\)。

根据这个性质,对每个 \(k\) 分别计算答案的时候可以考虑计算 \(i|j\subseteq k\)。

也就是说我们可以计算 \(k\) 子集中的最大值和次大值,然后将其加起来。

计算方法和 FWT 还是一样的,按位考虑即可。

复杂度 \(O(n2^n)\)。

标签:kk,复杂度,子集,计算,ARC100E,n2,subseteq
来源: https://www.cnblogs.com/lmpp/p/16607111.html