最大总和小于限额

时间:2012-05-18 08:53:26

标签: arrays algorithm

我一直在尝试解决问题http://www.spoj.pl/problems/RPLB/,但却无法提出算法。

我的尝试 -

  1. 将输入分为两个数组,一个是奇数索引处的值,另一个是偶数索引处的值。之后,对两个数组进行排序并添加数字,直到总和小于限制。我很快就得到了一些测试用例的漏洞。

  2. 我将输入存储在一个数组中,并且每次我尝试添加最大的剩余数字,条件是它与已经添加的任何数字相邻但是这个算法也证明是错误的。

  3. 现在,通过尝试所有可能的组合,我能够思考的解决方案只有指数:(

    请提出解决此问题的正确算法。

2 个答案:

答案 0 :(得分:1)

这是带有附加约束的KNAPSACK问题(你不能选择两个相邻的衬套),而附加约束不会使它更容易也更难。由于它与KNAPSACK一样难,即NP-complete,除了强力搜索(可以优化但无论如何都将保持指数/超多项式)之外,基本上没有其他事可做。

答案 1 :(得分:0)

这是一个众所周知的NP难题,所以如果您的解决方案是指数级的,请不要担心。