我一直在尝试解决问题http://www.spoj.pl/problems/RPLB/,但却无法提出算法。
我的尝试 -
将输入分为两个数组,一个是奇数索引处的值,另一个是偶数索引处的值。之后,对两个数组进行排序并添加数字,直到总和小于限制。我很快就得到了一些测试用例的漏洞。
我将输入存储在一个数组中,并且每次我尝试添加最大的剩余数字,条件是它与已经添加的任何数字相邻但是这个算法也证明是错误的。
现在,通过尝试所有可能的组合,我能够思考的解决方案只有指数:(
请提出解决此问题的正确算法。
答案 0 :(得分:1)
这是带有附加约束的KNAPSACK问题(你不能选择两个相邻的衬套),而附加约束不会使它更容易也更难。由于它与KNAPSACK一样难,即NP-complete,除了强力搜索(可以优化但无论如何都将保持指数/超多项式)之外,基本上没有其他事可做。
答案 1 :(得分:0)
这是一个众所周知的NP难题,所以如果您的解决方案是指数级的,请不要担心。