题目链接
做法
听说是一道tourist在考场上都没切的题,不过是真的想不到啊。。。
暴力还是比较好想的,我们枚举翻转哪些行,在队每一列贪心就行了。
先预处理$g(i)$表示状态$i$的答案
显然$g(i)=Min(popcount(i),n-popcount(i))$
复杂度$O(2^n*m)$
发现暴力的瓶颈在于每次枚举状态之后都要$O(m)$枚举一遍。
考虑能不能一起计算。
用$f(i)$表示矩阵初始状态时,状态为$i$的列有多少个。
用$F(i)$表示行翻转状态为i的答案。
那么有
由于$s\oplus i\oplus i=s$
就得到了一个标准的$FWT$卷积形式,用异或卷积卷一下就ok了。
复杂度$O(2^n*n)$
代码
1 |
|