使用bitset解决sum-subset拼图的变化

时间:2013-12-29 11:28:44

标签: c++ algorithm bitset

我遇到了使用bitset解决sum-suset问题的另一种方法。

以下是解决方案的链接: -

variation of sum-subset problem solution link

问题描述在以下链接中给出: -

Problem statement

不幸的是,我无法理解使用bitset的解决方案。需要你的帮助

1 个答案:

答案 0 :(得分:1)

要平均打包每个靴子,你需要每个靴子的总重量的一半。

要检查是否可行,您需要知道某个子集是否添加到sum / 2。

我们将使用我们目前所见的行李建立一组可到达的号码。 要做到这一点你应该看到,如果我有这样的一套和一件新的行李,那么我现在可以达到旧套装中的任何值,以及任何这些值加上新物品的重量。

这个关键步骤在代码中完成:

    b |= b << luggage ;

这相当于:

    newReachable = b<<luggage
    b |= newReachable

首先,b << luggage获取当前可达到的数字b,并通过行李位右移。我们认为我们只读了一个5公斤的包,这会占用原先设定的每个位,而不是设置一个5公斤的包。

然后b |= newReachable说我们可以到达所有新访问的那些,我们仍然可以到达所有以前可以访问的那些,因此我们希望逻辑上将这些集合在一起,这就是按位或运算符确实