python 最小硬币数_Python之动态规划(最少硬币数找零)

本文介绍了一种使用Python动态规划算法解决找零问题的方法。通过定义一个函数`dpMakeChange`,计算出找零最少硬币数量,并提供`printCoins`函数展示找零硬币的具体面值。在示例中,找零63美分仅需3个21美分的硬币。
摘要由CSDN通过智能技术生成

完整代码:

# 动态规划最少硬币数找零

def dpMakeChange(coinValueList, change, minCoins, coinsUsed):

for cents in range(change + 1):#依次循环从0到所需兑换面值的每一个面值

coinCount = cents #初始化最优解为当前面值数

newCoin = 1 #初始化找零硬币面值列表中的面值

for j in [c for c in coinValueList if c <= cents]:#在不大于要找零的硬币面值列表中循环

# 注:minCoins[cents - j] + 1 = cents - j的最优解 + 1(1是j的最优解,因为j为一个硬币) = cents的最优解 - j的最优解 + j的最优解 = cents的最优解,所以下一行代码的意思就是:若当前面值的最优解比上一循环(或初始)当前面值的最优解更小,则

if minCoins[cents - j] + 1 < coinCount:

coinCount = minCoins[cents - j] + 1 #临时保存当前面值的最优解

# 将当前硬币面值j临时保存为当前找零面值在找零硬币面值列表中的对应值

newCoin = j

minCoins[cents] = coinCount #记录当前找零面值在找零最优解列表中的最优解

coinsUsed[cents] = newCoin#记录当前找零面值在找零硬币面值列表中对应的值

return minCoins[change]#返回待找零数值的最优解

# 获取最终找零的硬币面值

def p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值