1 条题解
-
0
T2:
30%:枚举每个数所在的集合或者不选,然后判定即可。复杂度O(n*3^n)。
60%: Dp,两个数相等就相当于两个数的xor为0。设 f[i][j][k=0..2]代表 处理到第 I 个数, 如果 k = 1代表and值为j,如果k = 2代表xor 值为 j,如果k = 0则代表一个元素都没 取。所以很容易得到方程:
f[i][j][0] = f[i + 1][j][0]
f[i][j & ai][1] = f[i + 1][j][1] + f[i + 1][j][0] + f[i + 1][j & ai][1]
f[i][j ^ ai][2] = f[i + 1][j][1] + f[i + 1][j][2] + f[i + 1][j ^ ai][2];
最后f[1][0][2]就是答案, 复杂度为O(n * 1024 * 3)
DP还可以分开用f[i][j]和g[i][j]表示前i个xor值为j,后i个and值为j的方案数, 随后枚举分界点k来求总方案数。复杂度O(n * 1024 * 3)。
100%:满分数据需要高精,答案位数较大,需要进行压位来防止TLE,因为不知道答案的 位数究竟多大,压位后高精数组仍需要开的较大一些,所以原DP的数组滚动即可。
- 1
信息
- ID
- 1997
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者