Files
2026-06-16 09:35:51 +08:00

43 lines
1.1 KiB
Python

"""
找零问题 — 贪心算法
使用最少硬币凑出指定金额
"""
def min_coins_greedy(coins, amount):
"""贪心找零(硬币面额需满足贪心选择性质)"""
coins_sorted = sorted(coins, reverse=True)
result = []
remaining = amount
for coin in coins_sorted:
while remaining >= coin:
result.append(coin)
remaining -= coin
return result
def min_coins_dp(coins, amount):
"""动态规划找零(通用解法)"""
MAX = float('inf')
dp = [MAX] * (amount + 1)
dp[0] = 0
for i in range(1, amount + 1):
for coin in coins:
if i >= coin:
dp[i] = min(dp[i], dp[i - coin] + 1)
return dp[amount] if dp[amount] != MAX else -1
if __name__ == "__main__":
coins = [1, 5, 10, 25]
amount = 63
greedy_result = min_coins_greedy(coins, amount)
dp_result = min_coins_dp(coins, amount)
print(f"硬币面额: {coins}")
print(f"需要凑出: {amount}")
print(f"贪心结果: {greedy_result} (共 {len(greedy_result)} 枚)")
print(f"DP最少数量: {dp_result}")