![]() |
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)与您的非常相似(除了它们允许多次使用每个数字):
更新 |
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |