Python之动态规划(最少硬币数找零)

完整代码:

# 动态规划最少硬币数找零
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 printCoins(coinsUsed, change):
	while change > 0:
		thisCoin = coinsUsed[change]#从找零硬币面值
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值