用無限多的面值為 s = 的分幣,表示乙個特定的分值n,有多少種方法?這個就是找錢問題 (coin change problem)。
比如,用 1美分 和 5 美分,表示7美分,有2種方法,第一種是1個5美分,2個1美分;第二種是7個1美分。
因為順序對結果沒有影響,即「1個5美分,2個1美分」和「2個1美分,1個5美分」是一樣的,我們限定 s1 < s2 < … < sm。用遞迴的方法,解法的數量 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()函式的運
硬幣找錢問題
設有6種不同面值的硬幣,各硬幣的面值分別為5分 1角 2角 5角 1元和2元。現在要用這些面值的硬幣來購物和找錢。購物時可以使用的各種面值的硬幣個數存於陣列coins 1 6 中,假設商店裡各面值的硬幣有足夠多。對於給定的付款金額,計算使用硬幣個數最少的交易方案。輸入資料的每一行有6個整數和乙個有2...
Problem 找錢問題
time limit 1 sec memory limit 64 mb submit 12397 solved 3423 買火車票時經常會碰到找錢問題。售票員手中有50 20 10 5 1元的錢幣,你知道怎麼找錢才能使找回的零錢張數最少嗎?多組測試資料,輸入需要找錢的錢數 輸出按下面格式 第一行輸出...
硬幣找錢問題
硬幣找錢問題 time limit 1000ms memory limit 65536k total submit 3 accepted 1 description 設有6 種不同面值的硬幣,各硬幣的面值分別為5 分,1 角,2 角,5 角,1 元,2元。現要用這些面值的硬幣來購物和找錢。購物時可以...