所需的最小行李数量

时间:2013-09-30 18:32:19

标签: algorithm

每个项目有n项,长度为b。在项目上写入的不同条形码仅包含0和1。我们需要将物品放入包中但有条件。大多数条形码只有1或2位不同。所以我们只能将一件物品放入另一个袋中,如果它与该袋子的所有其他物品有两个以上的不同位。 怎么找不到。需要的袋子。

约束:

1 <= N <= 10,000

1 <= B <= 32

第一行包含两个空格分隔的整数,N和B.

N:没有要携带的物品,B:每个条形码的长度。

示例:

5 6

1 1 1 1 1 1

0 0 0 0 1 0

1 1 0 0 0 1

1 1 1 0 0 0

1 0 0 0 0 0

其中5是否。项目和每个项目的6长度。

结果:2

说明:

第1项与所有项目的其余项目有2位以上不同,因此它位于行李1中。

第2和第5项有2位不同,因此它们可以组合在一起。

第3和第4也只有2个不同的位,所以它们也可以放在同一个包里。

第5个只有2个不同的位,除了第1个,所以2,3,4,5都在第2个包中组合在一起。

2 个答案:

答案 0 :(得分:1)

第一步是制作图表:

节点是项目。连接不允许一起使用的每一对物品!

其次,将其解决为着色问题。互联网上有很多solutions

完成; - )

顺便说一下它是NP Hard,所以heuristics会是一个好主意!

答案 1 :(得分:1)

如果我们将每个条形码的1个数存储在一个数组中,按升序排序,迭代每个元素,然后计算大于2的两个相邻元素之间的差异,例如。数组[6,1,3,3,1],sorted =&gt; [1,1,3,3,6-] 答案是2 ....

这个解决方案会起作用吗?? ??