Description
给定一个 $n \times n$ 的网格,每个格子的权值为 $a_{i,j}$,现在要从 $(1,1)$ 走到 $(n,m)$,初始值为 $e$,求路径最大异或和。$(1 \leq n \leq 20,0 \leq a_{i,j},e \leq 10^9)$
Source
Solution
与 [Codeforces]1006F 相似,考虑 折半搜索 。从起点和终点分别开始搜,到对角线停止。
怎么求最大异或和呢?
我们可以建 $n$ 棵 Trie 。当我们第一次搜到对角线上的点 $(x,y)$ 时,把此时的路径异或和插入到第 $x$ 棵 Trie 中。当我们第二次从终点搜到 $(x,y)$ 时,又得到了一个路径和 $val$,显然这时我们要从第 $x$ 棵 Trie 中找到一个数,使它与 $val$ 的异或值最大。这就变成了一个很经典的问题,具体操作详见 [LOJ]10050 。注意搜索的边界和 Trie 的空间大小。
Code
1 |
|