我遇到了使用bitset解决sum-suset问题的另一种方法。
以下是解决方案的链接: -
variation of sum-subset problem solution link
问题描述在以下链接中给出: -
不幸的是,我无法理解使用bitset的解决方案。需要你的帮助
答案 0 :(得分:1)
要平均打包每个靴子,你需要每个靴子的总重量的一半。
要检查是否可行,您需要知道某个子集是否添加到sum / 2。
我们将使用我们目前所见的行李建立一组可到达的号码。 要做到这一点你应该看到,如果我有这样的一套和一件新的行李,那么我现在可以达到旧套装中的任何值,以及任何这些值加上新物品的重量。
这个关键步骤在代码中完成:
b |= b << luggage ;
这相当于:
newReachable = b<<luggage
b |= newReachable
首先,b << luggage
获取当前可达到的数字b
,并通过行李位右移。我们认为我们只读了一个5公斤的包,这会占用原先设定的每个位,而不是设置一个5公斤的包。
然后b |= newReachable
说我们可以到达所有新访问的那些,我们仍然可以到达所有以前可以访问的那些,因此我们希望逻辑上将这些集合在一起,这就是按位或运算符确实