题意
你有一个
n
n
n 行
m
m
m 列的
01
01
01 矩阵
A
A
A。
如果矩阵的第
i
i
i 列有奇数个
1
1
1,那么它的权值就是
a
i
3
b
i
ai^{3} b_i
ai3bi,否则它的权值就是
0
0
0。一个矩阵的权值定义为每列的权值和。
现在你可以删去这个矩阵的任意多行 (可以为
0
0
0),使得矩阵的权值最大。
对于所有数据,保证
1
≤
m
≤
70
,
a
i
=
±
1
,
1
≤
b
i
≤
35
1 ≤ m ≤ 70,a_i = ±1,1 ≤ b_i ≤ 35
1≤m≤70,ai=±1,1≤bi≤35,且对于任意的
i
!
=
j
i != j
i!=j,保证
a
i
!
=
a
j
a_i != a_j
ai!=aj 或
b
i
!
=
b
j
b_i != b_j
bi!=bj。
对于
30
30%
30 的数据,
1
≤
n
≤
20
1 ≤ n ≤ 20
1≤n≤20;
对于
70
70%
70 的数据,
1
≤
n
≤
2000
1 ≤ n ≤ 2000
1≤n≤2000;
对于
100
100%
100 的数据,
1
≤
n
≤
200000
1 \le n\le 200000
1≤n≤200000。
题解
显然按位贪心,问题变为在前面限制满足的情况下尽量满足当前限制。发现限制的形式为:该列中
1
1
1所在的行选的个数应为奇或偶。发现其与异或运算有关,进一步转化为:把奇看为
1
1
1,偶看为
0
0
0,得到一个目标数,选出的行的异或和应为目标数。而
m
m
m不大,可用线性基维护做到
O
(
n
m
+
m
3
)
O(nm+m^{3})
O(nm+m3)。
对于同一位上同时有
a
a
a为
1
、
−
1
1、-1
1、−1的位,先考虑能否
1
1
1为
1
,
−
1
1,-1
1,−1为
0
0
0,否则要求两位相同,这个限制可以考虑把这两个同时变为它们的异或值,要求最后这两个都是
0
0
0。