本问题的解决方案是将输出错误更正,这可以通过修改Bestsum Memoization程序来实现。具体来说,需要在memoization函数中返回一个元组,其中包括最佳和及其相应的数组。然后,打印此元组的元素而不是直接打印最佳和即可。代码示例如下:
def best_sum(target_sum, numbers, memo={}): if target_sum in memo: return memo[target_sum]
if target_sum == 0:
return []
if target_sum < 0:
return None
shortest_combination = None
for num in numbers:
remainder = target_sum - num
remainder_combination = best_sum(remainder, numbers, memo)
if remainder_combination is not None:
combination = [*remainder_combination, num]
if shortest_combination is None or len(combination) < len(shortest_combination):
shortest_combination = combination
memo[target_sum] = shortest_combination
return shortest_combination if shortest_combination is not None else None
print(best_sum(7, [5, 3, 4, 7])) # [7] print(best_sum(8, [2, 3, 5])) # [3, 5] print(best_sum(8, [1, 4, 5])) # [4, 4] print(best_sum(100, [1, 2, 5, 25])) # [25, 25, 25, 25]
下一篇:Bestsum问题中的输出错误