我希望能够找到进入目标的最小号码。寻找离开最小剩余部分的最大号码
例如:
target = 100
vals = [57, 71, 87, 97, 99, 101, 103, 113, 114, 115, 128, 129, 131, 137]
from itertools import combinations
def subsets_with_sum(lst, target, with_replacement=False):
x = 0 if with_replacement else 1
def _a(idx, l, r, t):
if t == sum(l): r.append(l)
elif t < sum(l): return
for u in range(idx, len(lst)):
_a(u + x, l + [lst[u]], r, t)
return r
return _a(0, [], [], target)
如果我要输入:
subsets_with_sum(vals, 270, False)
入壳,我将输出:
[[57, 99, 114]]
然而,如果我输入:
subsets_with_sum(vals, 239, False)
入壳,我将输出:
[]
相反,我想输出进入目标人数最多: [137, 101]
留下剩余1
有没有办法做到这个?
感谢您的输入! :) –
你能告诉我,如果这更快或下面的Ankush提供的方法更快?或者告诉我如何解决问题? –
@SyedArafatQureshi 1.要查看哪一个更快,您可以在同一个大输入上运行。 – Gassa