如果存在价格约束,如何从列表中最大化价值

时间:2015-09-22 07:12:47

标签: arrays algorithm set

我有5个列表:

列表1:['a',21,$ 17],['b',19,$ 14],['c',17,$ 13],['d',16,$ 13]

列表2:['e',19,$ 14],['f',16,$ 12],['g',14,$ 12],['h',11,$ 06]

列表3:['我',13,$ 09],['j',11,$ 07],['k',10,$ 06],['l',07,$ 06]

列表4:['m',16,$ 06],['n',13,$ 05],['o',10,$ 05],['p',06,$ 05]

列表5:['q',21,$ 13],['r',19,$ 14],['s',17,$ 12],['t',15,$ 11]

我的任务是从每个列表中选择1个数组,总共5个数组。我需要选择具有最高值(全部:总和:值)的数组,其中价格为50美元或以下(所有:价格之和)。

如何在不必遍历每个元素的情况下解决此问题?

我知道我可以将列表缩小为:

列表1:['a',21,$ 17],['b',19,$ 14],['c',17,$ 13]

列表2:['e',19,$ 14],['f',16,$ 12],['h',11,$ 06]

列表3:['我',13,$ 09],['j',11,$ 07],['k',10,$ 06]

列表4:['m',16,$ 06],['n',13,$ 05]

列表5:['q',21,$ 13],['s',17,$ 12],['t',15,$ 11]

与其左邻居相比,消除了价值较低但价格较高或相等的数组。

然而,这仍然太慢。

1 个答案:

答案 0 :(得分:0)

这是众所周知的knapsack problem

在您的情况下(因为您有小整数价格),可以使用动态编程解决。更简单的方法需要O(nW)时间,其中n是集合中元素的总数,W是权重限制(在您的情况下为50)。