1
7
|
2
6
正如其他人所指出的,这与子集和问题的优化版本是相同的,它是NP完全的。
例如,给定一个e>0,有一个多项式时间算法,它使用O((n*logt)/e)空间,(t是目标和,n是数组的大小),它给出一个子集,使得和z不小于最优值的1/(1+e)倍。 i、 e如果最大的子集和是y,那么算法会找到一个子集和z,使得
并使用空间O((n*logt)/e)。 这样的算法可以在这里找到: http://www.cs.dartmouth.edu/~ac/Teach/CS105-Winter05/Notes/nanda-scribe-3.pdf 希望这有帮助。 |
3
1
如果值相当小,则是一个简单的动态规划(DP)。时间复杂度为O(n*target),内存需求为O(target)。如果你满意的话,网上有很多DP教程。例如,这里讨论的第一个问题(与couns)与您的非常相似(除了它们允许多次使用每个数字):
更新 |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |
Wadu Hek · 查找列表中唯一的重复项 2 年前 |
Crawford Patten · 如何获得整数列表的四分位数 2 年前 |
MoonGoose · 如何在python中围绕特殊字符创建空间? 2 年前 |
taha khamis · 在一个数字中组合元素的省道 2 年前 |
Soup · 比O(n)更快地找到阶乘n模m 2 年前 |
BigO · 单词积分游戏不断增加数字[关闭] 2 年前 |