Python 硬币兑换问题

yipeiwu_com6年前Python基础

硬币兑换问题:

给定总金额为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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

CentOS 6.5下安装Python 3.5.2(与Python2并存)

本文主要给大家介绍了关于CentOS 6.5 安装Python 3.5.2并与Python2并存的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 安装步骤如下 1、准备编译环境...

详解Python_shutil模块

import shutil 高级的文件,文件夹,压缩包的处理模块,也主要用于文件的拷贝 shutil.copyfileobj(fsrc,fdst[,length]):  将文件的内容拷...

在Linux系统上通过uWSGI配置Nginx+Python环境的教程

1.安装ubuntu有uwsgi的ppa: add-apt-repository ppa:stevecrozz/ppa apt-get update apt-get instal...

常见的python正则用法实例讲解

下面列出Python正则表达式的几种匹配用法: 此外,关于正则的一切http://deerchao.net/tutorials/regex/regex.htm  1.测试正则表...

分享一下Python 开发者节省时间的10个方法

分享一下Python 开发者节省时间的10个方法

Python 是一个美丽的语言,可以激发用户对它的爱。所以如果你试图加入程序员行列,或者你有点厌倦C++,Perl,Java 和其他语言,我推荐你尝试Python. Python有很多吸...