在第一个元素上给出权重限制,获得对的第二个元素的最大总和

时间:2015-05-24 09:00:09

标签: java algorithm sorting optimization

我正在查看示例面试问题,这就出现了。

该问题要求一个程序包含两个数字,L(限制)和C(要输入的个案数)。然后,输入C量的整数对,其中该对由(权重,值)组成。

现在,程序应该给出权重加起来小于或等于限制的最大可能值。

例如,如果有人输入:

(10,4), (5,2), (1,1), (4,9), (5,7)

程序应输出17.第一对表示权重限制为10,并且将输入4个测试用例。接下来的四对是测试用例,最理想的组合由最后三种情况组成,因为它们的权重加起来<= 10而值得到17,这是给定限制的最高可能值。

我一直试图解决这个问题,但我找不到真正有效的解决方案。到目前为止,我采用的方法是找到所有可能的权重,加起来小于或等于限制,然后只需查看所有的总和,然后选择最大的权重。但我觉得这是一个非常低效的解决方案,使用某种排序可能更好。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是Knapsack Problem的一个实例。维基百科页面列出了许多有效解决此问题的已知算法。您可能希望从这些算法中获得一些灵感。