以下是一个使用动态规划算法解决找零问题的代码示例:
def make_change(coins, amount):
# 初始化动态规划数组,dp[i]表示凑齐金额i所需的最少硬币个数
dp = [float('inf')] * (amount + 1)
dp[0] = 0
# 遍历金额从1到amount,计算每个金额所需的最少硬币个数
for i in range(1, amount + 1):
# 遍历每种面额的硬币
for coin in coins:
if i >= coin:
# 选择使用当前硬币,更新最少硬币个数
dp[i] = min(dp[i], dp[i - coin] + 1)
# 如果最终金额的最少硬币个数仍然是无穷大,表示无法凑齐该金额
if dp[amount] == float('inf'):
return -1
else:
return dp[amount]
# 测试代码
coins = [1, 5, 10, 25]
amount = 36
result = make_change(coins, amount)
print("凑齐金额{}所需的最少硬币个数为:{}".format(amount, result))
以上代码使用动态规划的思想,通过遍历金额和硬币的组合,计算每个金额所需的最少硬币个数。最终返回凑齐目标金额所需的最少硬币个数。如果无法凑齐目标金额,则返回-1。