最多总和为'k'的子序列
Subsequence having sum at most 'k'
给定一个大小为n的非递减数组 A 和一个整数 k,如何找到数组A的子序列S,其元素的最大可能总和,使得这个总和最多为k。如果有多个这样的子序列,我们只对找到一个感兴趣。
例如,设数组为 {1, 2, 2, 4},因此,n = 4,设 k = 7。那么,答案应该是{1,2,4}。
蛮力方法大约需要 O(n(2^n-1((,但有没有更有效的解决这个问题的方法?
在一般情况下,答案是否定的。
只是确定是否存在元素总和为k
的解决方案等效于子集和问题,因此已经是 NP 完备的。
子集和问题可以等价地表述为:给定整数或 自然数
w_1,... ,w_n
它们中的任何子集的总和精确到W
但是,如果表示最大数量w
所需的n
或位数P
很小,则可能有更有效的解决方案(例如,如果P很小,则基于动态规划的伪多项式解决方案(。此外,如果您的所有数字 w 都是正数,那么也可能找到更好的解决方案。
相关文章:
- 没有找到相关文章