Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 一系列数字的最大异或_Algorithm_Max_Dynamic Programming_Xor - Fatal编程技术网

Algorithm 一系列数字的最大异或

Algorithm 一系列数字的最大异或,algorithm,max,dynamic-programming,xor,Algorithm,Max,Dynamic Programming,Xor,我正在努力解决这个问题。最初,我使用了一种蛮力方法,这种方法对于大的输入显然是失败的(当输入为100000000020000000时开始)。在教程Fcdkbear(竞赛用turtor)中,讨论了一种状态为d[p][fl1][fr1][fl2][fr2]的dp解决方案 在教程中进一步介绍 我们需要知道,我们可以将哪些位放入第p位的数字аa的二进制表示中。如果以下条件为真,我们可以放置0:L的第p位等于0,或者L的第p位等于1,变量fl1显示a的当前值严格大于L。同样,如果以下条件为真,我们可以放置

我正在努力解决这个问题。最初,我使用了一种蛮力方法,这种方法对于大的输入显然是失败的(当输入为100000000020000000时开始)。在教程Fcdkbear(竞赛用turtor)中,讨论了一种状态为
d[p][fl1][fr1][fl2][fr2]
的dp解决方案

在教程中进一步介绍

我们需要知道,我们可以将哪些位放入第p位的数字аa的二进制表示中。如果以下条件为真,我们可以放置0:L的第p位等于0,或者L的第p位等于1,变量fl1显示a的当前值严格大于L。同样,如果以下条件为真,我们可以放置1:R的第p位等于1,或者R的第p位等于0,变量fr1表明a的当前值严格小于R。同样,我们可以得到,我们可以将哪些位放入第p位数字b的二进制表示中

当L的第i位为0时,我们怎么能在a的第i位加上一个零呢。如果L和R都在同一个桶中(第2个边界,如16和24),我们最终将把0放在第4位,而如果a=20,我们可以把1放在第4位,因为R的第i位是0,而a>R。我想知道检查a>L与否有什么用。
从本质上说,我不明白

  • 国家是什么
  • 我们如何复发
  • 我知道这可能有点过分,但有人能用描述性的方式解释一下吗?因为社论太短了,什么都解释不了


    我已经看过了,但建议的解决方案和社论中给出的不同。我也知道这可以通过二进制搜索来解决,但如果我正确地解决了问题,我只关心DP解决方案:开始从左(MSB)到右(LSB)比较l和r的位。只要这些位相等,就没有选择的自由,相同的位必须出现在a和b中。第一个不同的位必须是r中的1和l中的0。它们也必须出现在a(0)和b(1)中。从这里可以最大化XOR结果。简单地用0表示b,用1表示a。这就得到了a+1==b,异或结果是a+b,它始终是2^n-1。

    如果我把问题弄对了:开始从左(MSB)到右(LSB)比较l和r的位。只要这些位相等,就没有选择的自由,相同的位必须出现在a和b中。第一个不同的位必须是r中的1和l中的0。它们也必须出现在a(0)和b(1)中。从这里可以最大化XOR结果。简单地用0表示b,用1表示a。这就得到了a+1==b,异或结果是a+b,它总是2^n-1。

    我没有遵循上面写的逻辑,但基本思想是逐点查找


    如果L和R在相同的位位置有不同的值,那么我们已经找到了将该位置的xor'd值最大化的候选者(0 xor 1=1 xor 0=1)。另一个要考虑的问题是R L的跨度是否大于该位的位置值。如果是这样,那么必须有两个不同的A和B值落在L和R之间,其中该位位置具有相反的值(并且能够在低位生成任何值的组合)。

    我不遵循上面写的逻辑,但基本思想是逐位查看


    如果L和R在相同的位位置有不同的值,那么我们已经找到了将该位置的xor'd值最大化的候选者(0 xor 1=1 xor 0=1)。另一个要考虑的问题是R L的跨度是否大于该位的位置值。如果是这样,则必须有两个不同的A和B值落在L和R之间,其中该位位置具有相反的值(并且能够生成低位中的任何值组合)。

    对不起,您是否忽略了问题中的动态编程标签?您是否认识可以回答的人。我所有的程序员朋友都放弃了。对不起,我忽略了问题中的动态编程标签。你知道谁能回答吗。我所有的程序员朋友都放弃了。对不起,我忽略了问题中的动态编程标签。你知道谁能回答吗。我所有的程序员朋友都放弃了。我已经说过我明白了,但我需要学习DP在这里的应用。我已经说过我明白了,但我需要学习DP在这里的应用。我已经说过我明白了,但我需要学习DP在这里的应用。