【发布时间】:2012-07-31 16:21:58
【问题描述】:
您有 2 个数组 a 和 b,每个数组包含 n 个数字。你有一个数字 k。
[n] = 索引集 1...n
我们希望找到[n]的子集S,使得a中S索引的元素总和至少为k,并且b中S索引的元素总和尽可能小。
我什至找不到一个多项式时间算法。对于如何解决此问题的任何想法,我将不胜感激。
【问题讨论】:
-
这是作业吗?到目前为止,您提出了哪些方法?子集 S 不一定是连续的元素,对吧?
-
这不是家庭作业。我正在阅读一个关于向玩家分配资源的问题,在特殊情况下会减少这种情况。我现在看到这是 NP 完全的。背包可以在多项式时间内求解,达到任意精度,我们也可以通过对目标值进行二分搜索将其简化为背包。所以,我想这也可以在多项式时间内以任何精度解决,不过我必须验证这一点。
标签: algorithm