AtCoder AT_abc407_d [ABC407D] Domino Covering XOR
题目大意
H × W H\times W H×W 的矩阵,第 i i i 行第 j j j 列的数记为 a i , j a_{i,j} ai,j,现在要往上面铺若干(可以为零)块多米诺骨牌。多米诺骨牌是一个 1 × 2 1\times2 1×2 或者 2 × 1 2\times1 2×1 的长方形,能盖住两个数。问没有被盖住的数的异或和的最大值是多少。
思路
发现数据范围中保证了 H W ≤ 20 HW\le20 HW≤20,然后考虑到多米诺骨牌只能是相邻的两个格,所以爆搜就能过。由于数据范围太小了,所以可以采用如下的结构进行搜索:
dfs(x, y, k): 如果已经全部搜完ans = max(ans, k)返回如果这个格已经被多米诺骨牌盖住搜索下一个返回不放置多米诺骨牌,搜索下一个放置多米诺骨牌,标记当前位置,枚举所有可能的位置如果越界或者已经被盖住跳过标记计算异或和并搜索下一个取消标记
标记可以使用回溯法,用一个二维数组;计算异或和直接使用 ^
符号。
代码
AC 记录:Submission #66114498。
由于已经给出了伪代码,不再给出详细代码,如有需要请私信联系。