时间:2021-05-22
硬币兑换问题:
给定总金额为A的一张纸币,现要兑换成面额分别为a1,a2,....,an的硬币,且希望所得到的硬币个数最少。
# 动态规划思想 dp方程式如下# dp[0] = 0# dp[i] = min{dp[i - coins[j]] + 1}, 且 其中 i >= coins[j], 0 <= j < coins.length# 回溯法,输出可找的硬币方案# path[i] 表示经过本次兑换后所剩下的面值,即 i - path[i] 可得到本次兑换的硬币值。 def changeCoins(coins, n): if n < 0: return None dp, path = [0] * (n+1), [0] * (n+1) # 初始化 for i in range(1, n+1): minNum = i # 初始化当前硬币最优值 for c in coins: # 扫描一遍硬币列表,选择一个最优值 if i >= c and minNum > dp[i-c]+1: minNum, path[i] = dp[i-c]+1, i - c dp[i] = minNum # 更新当前硬币最优值 print('最少硬币数:', dp[-1]) print('可找的硬币', end=': ') while path[n] != 0: print(n-path[n], end=' ') n = path[n] print(n, end=' ') if __name__ == '__main__': coins, n = [1, 4, 5], 22 # 输入可换的硬币种类,总金额n changeCoins(coins, n)以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了java动态规划算法——硬币找零问题。分享给大家供大家参考,具体如下:问题描述现在有3种硬币分别为:1元,5元,10元,现在给你63元,让你全部换
本文实例讲述了Python贪心算法。分享给大家供大家参考,具体如下:1.找零钱问题:假设只有1分、2分、五分、1角、二角、五角、1元的硬币。在超市结账时,如果需
最近,有用户发现,量子恒道积分兑换出现了问题,有积分却不能兑换服务,淘宝开店教程的小编找到了下面的解答:积分兑换是有一定限制的,规定您6个月中最多能兑换6次,如
京东会经常的发放一些福利兑换码,直接小编有朋友幸运拿到了,就立马跑过来问小编,京东兑换码在哪里兑换?怎么使用?今天小编整理了一些有关京东兑换码的相关问题解答,这
说到淘宝618,大家比较期待也就是红包,那活动红包能兑换几次?大家也没有数过,那618兑换红包,会不会出现兑换不成的情况,这也是个问题,所以,今天我们就来说下,