问题描述:
给出已有的硬币面额,和需用这些硬币组成的目标金钱数目,求能够组成这个目标金钱的最少硬币个数。
问题分析:
给定面额为c=[c1,c2,…ck],给定金钱数目为s,s可以由c中任意可行面额组成,则k可以分成:
s - ci + ci ,其中i<=k,且ci<=s,这样问题就转化为组成 金额为s-ci的最少硬币个数,假设为m,则组成s的最少硬币个数为m+1,同理可以继续求解s-ci。于是,我们可以定义d[n]表示组成n的最少硬币个数,那么
d[n]=min([ d[s-ci]+1,其中i<=k,且ci<=s ] ),我们可以由1到n依次记录d[x],即自底向上,当我们再次用到d[x]就不必再次计算。
python代码:
def leastCoins(c,s):
#初始化d数组,d[0]=0,其余为inf(无限大),共有s+1个元素
d=[float('inf') if i != 0 else 0 for i in range(s+1)]