我有N个列表,其中包含不同数量的对象,并且每个列表都包含X个必需的不同值。
一个简单的例子:
app
这里有一个解决方案是从List1中选择1和2,从List2中选择3,从List3中选择4
但如果问题看起来像这样,那就没有解决方案
List1 = [ 1,2,3,4 ] : 2
List2 = [ 2,3,4 ] : 1
List3 = [ 1,2,4 ] : 1
因此,解决此问题的强力解决方案是从第一个列表中选择所需数量的对象,然后从第二个列表中选择所选数字,其中所选数字不能在之前选择的位置。如果失败,请从第一个列表中选择其他对象,依此类推。
然而,这并不高效,我可能会在找到解决方案之前尝试所有组合,如果有的话。
那么,还有其他方法可以解决这个问题吗?
答案 0 :(得分:2)
此问题可以根据流量网络进行重述,并使用多个maximum flow algorithms解决:
以下是您的问题的流网络的外观:
如果最大流算法不产生等于所需总数的流量,则问题无法解决。否则,使用算法为G i 和N i 之间的边缘生成的容量分配,以确定哪些数字为从每一组中取出。