我的问题如下 -
我和我有一些数字,如下 -
2
2
2
2
3
3
17
17
17
17
17
17
17
17
17
34
34
34
34
34
68
68
68
136
因此,如果我将以下数字作为输入,则输出应如下 -
[输出是给定数字的总和, 只是大于输入]
Input Output
3 2,2
4 2,2
254 17,34,68,136
7 2,3,3 [or also with 2,2,2,2 but if return same sum,
then number count should min]
205 2,68,136
10 2,2,3,3
我不只是想尝试每一个组合(即蛮力)来获得结果。所以只想问一下上述情况是否有可能有效的算法。
感谢。
答案 0 :(得分:0)
我找到了一个可能的起点on Wikipedia:
更一般的问题是要求子集求和到指定值(不一定是0)。它可以通过上述算法的简单修改来解决。对于每个xi是正的并且由相同的常数界定的情况,Pisinger找到了线性时间算法。[3]
您的基本问题看起来像是它的扩展版本。您需要找到汇总到input
的集合的子集 - 或者失败,汇总到input+1
,或者失败,汇总到input+2
等。
因此,只需增加目标总和,重复运行Pisinger的算法,直到得到结果? (我没看过论文,所以我不知道Pisinger算法是否满足选择最小子集的决胜局条件。)