1. 问题描述

2. 思路

刚开始是想利用贪心算法。假如要找的零钱总额为49元,先找10块的,可以找40块,再继续找5块的,可以找5块,再继续找2块的,可以找4块。找够49元的最少纸币数为4 + 1 + 2 = 7。但是有些情况可能不太行,例如:有纸币1元、3元、4元,要找6元的零钱,如果按照贪心算法的话,是找一张4元和两张1元,一共3张纸币。但是找6块钱的话,最少的方法应该是找两张3块。因此贪心算法在这里是失效的。
进一步,可以利用动态规划的算法来进行求解:

2.1 动态规划



通过这个递归公式我们可以进行填表。表格的初始化方式不太一样。我们以三种纸币1、3、4,找6块钱的零钱为例。由于表的第一行表示用面额为0的纸币找钱,那么找任意数量的钱,都需要无穷多的纸币,因此标的第一行初始化为python能够支持的最大数。第一列表示需要找0块钱(不需要找钱),用什么面额的钱找,都只需要0张,因此除了第一格,第一列统一初始化为0。表中的其他初始化为0。

2.2 python代码

import sys
max = sys.maxsize
def giveChange(coinList,totalCoin):result = [[0 for i in range(totalCoin + 1)] for j in range(len(coinList) + 1)]for j in range(totalCoin+1):result[0][j] = maxfor i in range(1,len(coinList)+1):for j in range(1,totalCoin + 1):if j >= coinList[i-1]:result[i][j] = min(result[i - 1][j], result[i][j - coinList[i - 1]]+1)else:result[i][j] = result[i-1][j]return result,result[i][j]
print(giveChange([1,3,4],6))
# 运行结果:
([[9223372036854775807, 9223372036854775807, 9223372036854775807, 9223372036854775807, 9223372036854775807, 9223372036854775807, 9223372036854775807],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 1, 2, 3, 2],
[0, 1, 2, 1, 1, 2, 2]],2)

最后找6块钱用的最少的纸币数是2张。

动态规划——最少硬币找零问题(python)相关推荐

  1. java动态规划凑硬币问题,详解动态规划最少硬币找零问题--JavaScript实现

    硬币找零问题是动态规划的一个经典问题,其中最少硬币找零是一个变种,本篇将参照上一篇01背包问题的解题思路,来详细讲解一下最少硬币找零问题.如果你需要查看上一篇,可以点击下面链接: 详解动态规划01背包 ...

  2. 最少硬币找零问题(js实现)

    最少硬币找零问题 例如,有以下面额(硬币):1,5,10,5. 如果要找36的零钱,我们可以用1个25的硬币.1个10的硬币和1个1的硬币. 如何将这个解答转化成算法? 今天我们只要采用两种方法来解决 ...

  3. 最少硬币找零系列问题(01背包,完全背包,多重背包动态规划)

    背包问题思路解决最小硬币找零系列问题. 一.01硬币找零问题(01背包) 给定不同面额的硬币 coins 和总金额 m.每个硬币最多选择一次.计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬 ...

  4. 动态规划实战--硬币找零问题

    上一篇文章上提到硬币找零的例子,现在我们实战动态规划就从硬币找零开始 问题描述: 给定 n 种不同面值的硬币,分别记为 c[0], c[1], c[2], - c[n],同时还有一个总金额 k,编写一 ...

  5. 动态规划解决硬币找零问题

    题目描述:给定不同面额的硬币 coins 和一个需要找零的金额 n.编写一个函数来计算可以凑成金额n所需的最少的硬币个数.并求出所需硬币的所有面额并输出.(硬币可重复多次使用) 动态规划算法通常用于求 ...

  6. javascript经典算法之最小硬币找零问题

    前言 笔者之前也断断续续写过几篇javascript数据结构和算法的文章,之所以要写,是因为它们很重要.在前端的职业生涯中我们会遇到很多选择,走向不同的方向,但是唯一不变的,就是技术思维. 而算法,正 ...

  7. Python 动态规划(DynamicProgramming)-硬币找零

    动态规划(DynamicProgramming)-硬币找零 文章目录 动态规划(DynamicProgramming)-硬币找零 1.动态规划 a.什么是动态规划 b.适用对象 2.硬币找零-Codi ...

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

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

  9. 动态规划——硬币找零思路

    找零的两种问题 硬币找零问题,有两种.一种用贪心解决,一种用动态规划解决. 问题1:假设我们有 v1,v2,--,vn(单位是元)这些币值的硬币,它们的张数分别是 c1.c2.-, cn.我们现在要用 ...

最新文章

  1. 人工智能之机器学习常见算法
  2. Python自动化3.0-------学习之路-------函数!
  3. python csv读取-Python对于CSV文件的读取与写入
  4. Safari调试iOS应用
  5. 基于Spring提供支持不同设备的页面
  6. python 运算符 (算术运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、运算符优先级)(与或非)(异或)
  7. 简易计算器 java_用Java做一个简易计算器,要用到哪些知识?
  8. c++面向对象高级编程 学习十四 引用
  9. nRF51822 硬件复位引脚
  10. zuul网关找不到服务_网关zuul中对所有下游服务权限做控制zuulauth
  11. linux中mtools工具_Linux中mtools命令起什么作用呢?
  12. centos7安装telnet服务
  13. java 面试常问问题
  14. 同一页面中加载两个相同的控件,结果只能出来一个,这是为什么
  15. 利用百度图像识别鉴定植物
  16. 惠普计算机工作站,HP 笔记本计算机和移动工作站电池安全召回和更换计划
  17. 大型网络之BGP路由通告路由传递配置
  18. Electron 远程控制
  19. 基于SSM的企业公司财务管理(javaweb-php-asp.netC#-j2ee)包含资产管理-凭证管理-出纳往来管理-年终资产数据统计分析
  20. 一不小心,登上支付宝开发者社区热文榜单Top3

热门文章

  1. 关闭电脑SSD的磁盘碎片整理
  2. seo和python_Seo技术篇之python
  3. LSU——1116 Necklace(尺取)
  4. qbuttongroup如何都不选中_将单选按钮和多选按钮分组的类QButtonGroup
  5. vue中打印插件vue-print-nb(一)——基本示例
  6. python语言和sql语言的区别_SQL和Python的集合操作对比:适合的就好!
  7. Android 低功耗蓝牙的多设备连接与数据接收,简单实现
  8. Swagger的配置教程(超级详细)
  9. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day38】—— 实战那些事儿2
  10. 成都市武侯区计算机实验小学校长,成都武侯计算机实验小学在“博雅”文化沁润下绽放美丽花朵...