例如,假设S = {1000,500,250,100},而A = 900,则解决方案= {500,100,100,100,100}
这是我的尝试
numbers = [1000, 500, 250, 100]
amount = 900
def solve(numbers, amount, sum, solution):
for num in numbers:
if sum + num <= amount:
if sum + num == amount:
print(solution + [num])
return
solve(numbers, amount, sum + num, solution + [num])
solve(numbers, amount, 0, [])
它有效!某种程度上,我得到正确的答案,并且它始终是我打印的第一个值(因为我确保数字集按降序排列)。但是该算法会继续打印所有其他正确答案(此处正确是指总和而不是最小化| Solution |)
[500,100,100,100,100] [250,250,100,100,100,100] [250,100, 250,100,100,100] [250,100,100,250,100,100] [250,100,100, 100,250,100] [250,100,100,100,100,250]
以此类推
找到第一个答案后,如何退出该算法?
答案 0 :(得分:3)
由于您没有使用返回值:
numbers = [1000, 500, 250, 100]
amount = 900
def solve(numbers, amount, sum, solution):
for num in numbers:
if sum + num <= amount:
if sum + num == amount:
print(solution + [num])
return True
if solve(numbers, amount, sum + num, solution + [num]):
return True
return False
solve(numbers, amount, 0, [])