题目描述:

现有的钱币:coins=[1,2,5,7,10]

找零:change(假定为正整数)

求解:如何用最少的钱币进行找零

分析:可以使用动态规划

比如找零8元,可以将问题进行分解

dp[8]=dp[8-coins[j]]+1

即:

dp[8]=dp[8-1]+1=dp[7]+1
dp[8]=dp[8-2]+1=dp[6]+1
dp[8]=dp[8-5]+1=dp[3]+1
dp[8]=dp[8-7]+1=dp[1]+1

初始化:

dp=[change+1]*(change+1)  #对应的dp[0],dp[1],dp[2]...dp[change]
dp[0]=0   #因为找0元需要0张钱币

使用的钱币初始化:

coins_used=[0]*(change+1)

代码:

def coin_change(coins,change,dp,coins_used):'''利用动态规划求解找零需要的钱币张数,以及钱币的使用情况'''for i in range(1,change+1):#依次求解,dp[1]~dp[change]for j in range(len(coins)):if coins[j]<=i:#使用这张钱币的前提,纸币的金额数<=需要找零的金额,比如:找零8块,不能使用10块的钱币if dp[i-coins[j]]+1<dp[i]:#dp[i]=min(dp[i],dp[i-coins[j]]+1)dp[i]=dp[i-coins[j]]+1#记录使用的钱币new_coin=coins[j]coins_used[i]=new_coinif dp[change]>change:#无解的情况,初始化的时候设置dp[change]=change+1return -1else:return dp[change]
def used_coins(change,used_coins):'''利用used_coins求解使用的钱币'''re=[]while change:#dp[i]=dp[i-coins[j]]+1    used_coins[change]=coins[j]tmp=used_coins[change]re.append(tmp)change-=tmpreturn reif __name__=='__main__':#初始化coins=[1,2,5,7,10]change=16dp=[change+1]*(change+1)dp[0]=0coins_used=[0]*(change+1)re=coin_change(coins,change,dp,coins_used)re_coins=used_coins(change,coins_used)print("找零{0}元需要{1}张钱币,分别是{2}".format(change,re,re_coins))

执行结果:

找零16元需要3张钱币,分别是[1, 5, 10]

python 找零问题 动态规划相关推荐

  1. python找零方案_从自动贩卖机找零看Python中的动态规划问题

    原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...

  2. python找零_python 找零问题 动态规划

    题目描述: 现有的钱币:coins=[1,2,5,7,10] 找零:change(假定为正整数) 求解:如何用最少的钱币进行找零 分析:可以使用动态规划 比如找零8元,可以将问题进行分解 dp[8]= ...

  3. python找零_用python实现零钱找零的三种方法

    1.递归(recursion)def coins_changeREC(coin_values, change): """ 递归实现零钱找零 ""&qu ...

  4. python找零_【python算法书】硬币找零问题?

    题目:窝窝要去商店买棒棒糖,她怎么样才能用最少个数的硬币买到心仪的糖果呢? 分析:找零问题的贪心算法求解.为了满足我们要用最少的硬币数量支付指定额度的金额这一要求,每次使用可选的最大金额付款符合一贯& ...

  5. 钱币找零问题 - 动态规划

    先从一个题目引出动态规划. 有数组 penny,penny 中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,给定一个整数 N 表示货币总数,再给定一个整数 aim ...

  6. python找零_Python 找零问题

    #coding = utf-8 def Change_Money(money): print('总金额:'+str(money)+'元') loop=True tmp=[] # 面值列表 单位:元 t ...

  7. 从自动贩卖机找零看Python中的动态规划问题

    原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...

  8. Python数据结构20:动态规划:找零兑换问题的动态规划解法并显示使用的硬币组合

    在我们使用递归算法时,可能会出现规模庞大的重复计算,用一个中间表记录每个计算过的最优解法,就可以避免大量的重复计算.中间结果记录可以很好解决找零兑换问题.实际上,这种方法还不能称为动态规划,而是叫做& ...

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

    完整代码: # 动态规划最少硬币数找零 def dpMakeChange(coinValueList, change, minCoins, coinsUsed): for cents in range ...

最新文章

  1. anaconda更换镜像源
  2. 20万Star的编程学习教程:让你的编码之路事半功倍!
  3. SEO站内优化系列讲座(八)——
  4. nodejs 获取post数据
  5. 核心概念——节点分组 Group
  6. Quartus II 8.1 详解--有图---图片详解 【1讲】
  7. 笔记10:时时屏幕抓取小程序
  8. 1.9编程基础之顺序查找02:输出最高分数的学生姓名
  9. React Native – 使用 JavaScript 开发原生应用
  10. 软件技术论坛_NASAC 2019技术论坛: 系统软件构造与验证技术
  11. 工作流的大致开发流程
  12. tenda无线网卡Linux驱动,腾达(Tenda)W311MI V2.0网卡驱动(LINUX)
  13. [渝粤教育] 中国地质大学 信息检索 复习题 (2)
  14. 比想像力更难的,是按自己的价值观行动的勇气
  15. 很多次游戏的最后取胜实际上都有很强的偶然性
  16. 提高生活、学习、工作效率的方法——时间管理Vs个人管理
  17. windows 挂载百度网盘/阿里云盘等(网盘变本地硬盘) alist + raidrive
  18. mysql pdo 端口_链接Mysql的api mysqli和pdo
  19. 图片数据的基本预处理与数据增强
  20. js内置对象Date

热门文章

  1. UnboundLocalError: local variable ‘Num_fSu‘ referenced before assignment
  2. 【阶段总结】大四上学期总结
  3. Linux自定义日志文件设置回滚(避免信息溢出)
  4. 空白脂质体冻干粉制备以及荧光素修饰空白脂质体的应用
  5. 小红书接口加密参数X-sign
  6. 协众信息技术平面海报设计,你知道多少
  7. spring(一)依赖注入与 SPEL
  8. 监听支付宝、微信 二合一 个人免签最新,运行起来之后无需人工操作,绕过验证码
  9. LED小间距屏幕理解
  10. 此windows不是正版