def dpmakechange(coinvaluelist, change, mincoins):
for cents in range(change+1):
# 一開始以一元錢為最起始單位,比如七元錢要七個一元,五元錢要五個一元
coincount = cents
# 然後再小於我們所需金額的零錢裡尋找
# 比如我們有1 3 5的面值,對4找零,則列表裡面是[1, 3]
for j in [c for c in coinvaluelist if c <= cents]:
# 如果以前的面值比用一分錢的數量要少
# 則賦值
"""比如我們4元錢可以用1元和3元來找
我們進入迴圈的時候,預設coincount是都用一元錢,也就是4元錢需要4個一元錢
接著我們再找,列表裡有個3,因此我們會想能不能用3元去代替,也就是用3元錢所需找零量再加個1
然後進入乙個if語句,判斷是否比之前coincount小,如果是,則把值記錄到mincoins裡面
"""if mincoins[cents-j] + 1 < coincount:
coincount = mincoins[cents-j] + 1
mincoins[cents] = coincount
return mincoins[change]
print(dpmakechange([1, 2], 4, [0]*12))
動態規劃 買票找零
水題一道,但是感覺起來挺有意思的。一場激烈足球賽即將開始,售票員緊張地賣票著 每張球票50 元,現在有2n 1 n 18 個球迷排隊購票,其中 n個手持 50元鈔票,另外 n個手持 100元鈔票。假設開始售票時售票處沒有零錢可以找零。問這2n 個人有多少種排隊方式,不至使售票處出現找不出零的局面?例...
找零問題 動態規劃
當乙個幣值組合用貪婪演算法不能找出最優解的時候,比如對於 1,2,5 7,10。如果找14元錢的話,貪婪演算法答案是10,2,2,但最優解為7,7。那麼利用動態規劃就能找出最優解,只是時間和空間複雜度都很高,o nm 首先寫出狀態方程 f i 1,x 如果v i x 即當如果當前選擇的幣值大於找零的...
動態規劃 硬幣找零
時間限制 1000 ms 記憶體限制 65535 kb 描述在現實生活中,我們經常遇到硬幣找零的問題,例如,在發工資時,財務人員就需要計算最少的找零硬幣數,以便他們能從銀行拿回最少的硬幣數,並保證能用這些硬幣發工資。我們應該注意到,人民幣的硬幣系統是 100,50,20,10,5,2,1,0.5,0...