📅  最后修改于: 2023-12-03 15:12:13.615000             🧑  作者: Mango
本程序是基于动态规划算法实现的,用于计算购买指定金额所需的最小硬币数量及硬币组合方案。
def change(coins: List[int], amount: int) -> Tuple[int, List[int]]:
pass
from typing import List, Tuple
def change(coins: List[int], amount: int) -> Tuple[int, List[int]]:
"""
计算购买指定金额所需的最小硬币数量及硬币组合方案
"""
n = len(coins)
dp = [[0] * (amount + 1) for _ in range(n + 1)]
for i in range(n + 1):
dp[i][0] = 0
for j in range(amount + 1):
dp[0][j] = float("inf")
for i in range(1, n + 1):
for j in range(1, amount + 1):
if j >= coins[i - 1]:
dp[i][j] = min(dp[i - 1][j], dp[i][j - coins[i - 1]] + 1)
else:
dp[i][j] = dp[i - 1][j]
if dp[n][amount] == float("inf"):
return -1, []
res = []
i, j = n, amount
while i > 0 and j > 0:
if dp[i][j] == dp[i - 1][j]:
i -= 1
else:
res.append(coins[i - 1])
j -= coins[i - 1]
return dp[n][amount], res