每个项目有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个包中组合在一起。
答案 0 :(得分:1)
第一步是制作图表:
节点是项目。连接不允许一起使用的每一对物品!
其次,将其解决为着色问题。互联网上有很多solutions!
完成; - )
顺便说一下它是NP Hard,所以heuristics会是一个好主意!
答案 1 :(得分:1)
如果我们将每个条形码的1个数存储在一个数组中,按升序排序,迭代每个元素,然后计算大于2的两个相邻元素之间的差异,例如。数组[6,1,3,3,1],sorted =&gt; [1,1,3,3,6-] 答案是2 ....
这个解决方案会起作用吗?? ??