我有n个整数a_1, ..., a_n
。我想从xor形成其他人的所有人中选择最小数字。
例如,考虑[1,2,3]
,1^3=2
,因此您不需要数组中的2
。所以你可以删除它。最终得到[1,3]
。所以元素的最小数量是2
,它们可以通过xored中的任何两个来形成数组中的所有原始元素。贪婪的方法会在这里起作用吗?还是DP?
编辑:解释我在想什么。我想到的一种贪婪的方法是因为a^b=c
然后是a^c=b
和b^c=a
。首先,我删除所有重复项。然后我将在开头列表中首先列出每个元素可以配对的所有对,以在数组中形成另一个元素。预处理需要O(n^3)
。然后我选择贡献最少的元素,然后删除它,然后从每个其他元素中减去1。我重复这个,直到所有元素都有< = 2对。我停下来这也需要O(n^3)
总共O(n^3)
。这种贪婪的方法有用吗?有DP方法吗?
答案 0 :(得分:0)
如果n以50为界,我认为回溯应该有效。
假设在某个步骤中我们已经选择了一个 S 数字子集(应该产生所有其他数字),并希望在该子集中包含一个新数字。 然后我们可以做到以下几点:
此外,您应该跟踪当前的最佳解决方案,并切断所有不会获得更好结果的分支。