python函数找钱_找钱问题–动态规划一例
用無限多的面值為 S = {S1, S2, …, Sm} 的分幣,表示一個(gè)特定的分值n,有多少種方法?這個(gè)就是找錢問題 (Coin Change Problem)。
比如,用 1美分 和 5 美分,表示7美分,有2種方法,第一種是1個(gè)5美分,2個(gè)1美分;第二種是7個(gè)1美分。
因?yàn)轫樞驅(qū)Y(jié)果沒有影響,即“1個(gè)5美分,2個(gè)1美分”和“2個(gè)1美分,1個(gè)5美分”是一樣的,我們限定 S1 < S2 < … < Sm。用遞歸的方法,解法的數(shù)量 C(n, m),可以分成2類:
一類是表示方法里不需要 Sm的,另一類是表示方法里需要Sm的。如上面的例子,一類表示是需要5美分,另一類不需要。
于是,遞歸公式如下:
C(n, m) = C(n, m-1) + C(n-Sm, m)
Python代碼:def count1(n,m):
global numCalls
numCalls += 1
global S
if n == 0:
return 1
if n < 0:
return 0
if m == 1:
return 1
return count1(n, m-1) + count1(n-S[m-1],m)
S = (1,5,10,25)
numCalls = 0
print count1(100,len(S))
print numCalls
count1()函數(shù)的運(yùn)
總結(jié)
以上是生活随笔為你收集整理的python函数找钱_找钱问题–动态规划一例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海计算机考试分值,2019年上海中考总
- 下一篇: 用python画枫叶-Python中的用