所以,我有12个列表,每个列表包含28个带值的项目。
我试图通过使用其他11个列表切换项目来最大化第一个列表的值。
我也可以交易不同数量的物品。例如,我可以从列表1交换6个项目,从列表2交换3个项目。或者,我可以从列表1交易19个项目,从列表2交换22个项目。大型池中还有其他项目不属于列表,因此,如果列表收到超过28个项目,则可以轻松删除最低值,如果列表少于28个项目,则可以轻松添加新项目。
然而,一个限制是我一次只能交易一个清单。例如,我不能将列表1中的3个项目交换到列表2,将列表2中的3个项目交换到列表3,并将列表3中的3个项目交换到列表1.当我从列表1交易时,我只能一次只交换一个列表。
我显然可以蛮力这个,但我觉得这需要永远。我的组合不是很好,所以如果我想暴力,我不确定会有多少种不同的组合。
所以我的问题是,在这里强制推行一个可行的解决方案,如果没有,那么算法的一个例子可以帮助我吗?
谢谢,Krzys。
编辑:
示例:
List 1
[Apple - 12]
[Banana - 5]
[Orange - 8]
List 2
[Steak - 15]
[Chicken - 2]
[Fish - 7]
List 3
[Zebra - 20]
[Horse - 6]
[Elephant - 10]
所以我将从列表1开始。这是程序将要做的事情:
if (List1.Apple - List2.Steak < BestTradeAvailable) Then BestTradeAvailable = List1.Apple - List2.Steak
if (list1.Apple - List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = list1.Apple - List2.Chicken
if (list1.Apple - list2.Fish < BestTradeAvailable) Then BestTradeAvailable = list1.Apple - list2.Fish
if (list1.Banana - List2.Steak < BestTradeAvailable) Then BestTradeAvailable = list1.Banana - List2.Steak
if (list1.Banana - List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = list1.Banana - List2.Chicken
if (list1.Banana - List2.Fish < BestTradeAvailable) Then BestTradeAvailable = list1.Banana - List2.Fish
等 我也希望一次做多个项目,所以:
if (list1.Apple + list1.Banana - List2.Steak + List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = list1.Apple + list1.Banana - List2.Steak + List2.Chicken
但正如我之前所说,你可以交换清单1中的一项和清单2中的两项:
if (list1.Apple - List2.Steak + List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = List1.Apple - List2.Steak + List2.Chicken
所以基本上,我只想尝试找到最好的交易。
在这个例子中,最好的交易是交易Apple + Orange到List3的Zebra和Elephant,因为这个交易增加了List1的总价值最高金额。
答案 0 :(得分:0)
基本上你需要对列表进行排序并占据前28名吗?
优先队列可行。
答案 1 :(得分:0)
强力解决方案只需要O(n ^ 2 *(m-1))时间复杂度,其中n是列表中的项目数,m是列表数。如果你想寻找所有的组合,它将是O(n ^ 2 *(n-1)*(m-1))时间复杂度,你只需要尝试232848种组合。或者所有组合都是n!如果订单也很重要。