任何人都可以提示如何解决这个问题吗?
给定一个数组A.是否存在数组A的任何子集,如果我们对该子集的所有元素执行AND,则输出应该是2的幂。
我已经考虑过生成一个功能集并解决它,但它的复杂性会非常差(2 ^ n)。
先谢谢。
答案 0 :(得分:3)
你可以从不同的角度来看待它:选择2的力量。我们能生成它吗?
这个问题很容易回答。从集合中取出与2的幂对应的位的所有项目。计算所有这些的AND。结果必须通过构造具有我们寻找的位,但它可能有也可能没有设置任何其他位。如果它还有其他位,那么选择其他位(较小的 - 你不能选择任何额外的项,因为它们没有设置目标位)也不会工作,它只能更多< / em>设置了错误的位,因为它可以减少取消位的可能性。
只需为2的所有可能幂做到这一点,这只是集合中最大整数中的位数。