lar*_*ars 1 algorithm knapsack-problem dynamic-programming coin-change
这是硬币兑换问题的一个版本。因此,这是一个动态规划问题。
我知道如何确定您是否可以找零,如果您最多可以使用每种面额的一枚硬币,或者您最多可以使用 k 枚硬币,但不能同时使用两者。
组合约束相当简单。我们可以构建一个三维表,其维度表示允许的最大硬币数、允许的硬币数量和目标总和,或者我们可以说“搞砸”并在简单的递归解决方案之上抛出记忆。在 Python 中:
# Assume we have a memoization decorator.
# functools.lru_cache(maxsize=None) would do.
@memoize
def knapsack_possible(coin_tuple, target, k):
if not target:
# Target achieved.
return True
elif not coin_tuple or not k:
# Out of coins.
return False
else:
return (knapsack_possible(coin_tuple[:-1], target, k) or
knapsack_possible(coin_tuple[:-1], target-coin_list[-1], k-1)
Run Code Online (Sandbox Code Playgroud)