題目描述:
給你六種面額1、5、10、20、50、100元的紙幣,假設每種幣值的數量都足夠多,編寫程式求組成n員(n為0-10000的非負整數)的不同組合的個數。
輸入描述:
輸入為乙個數字n,即需要拼湊的面額
輸出描述:
輸出也是乙個數字,為組成n的組合個數。
示例1輸入5輸出
解題思路:
這個題的思路是動態規劃的演算法思路,如果用二維的則會超時,採用一維的則首先對幣種遍歷,每遍歷乙個幣種coins[i],然後再對1,n(需要拼湊的錢數)進行依次遍歷,其實就轉化為n-coins[i]的問題了,這樣就可以計算總的方案數。該動態規劃的狀態轉移方程:dp[j]=dp[j]+dp[j-coins[i]](前提條件是j-coins[i]>=0)
**實現:
#-*-coding:utf-8 -*-
while true:
try:
n=int(raw_input())
coins=[1,5,10,20,50,100]
h=len(coins)
dp=[0 for i in range(10001)]
dp[0]=1
for i in range(h):
for j in range(1,n+1):
if j>=coins[i]:
dp[j]+=dp[j-coins[i]]
print dp[n]
except:
break
動態規劃演算法
一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...
動態規劃演算法
動態規劃 通過把原問題分解為相對簡單的子問題來求解複雜問題。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。演算法總體思想 演算法的基本步驟 演算法的基本要素 最優子結構 重疊子問題 備忘錄方法 問題描述 子串行 公共子串行 最長公共子串行 lcs 問題 問題分析 動態規劃求解lcs問題 最長...
動態規劃演算法
動態規劃演算法的思路 動態規劃法即 dynamic programming method dp 是系統分析中的種常用方法。動態規劃法是20世紀50年代由貝爾曼 r.bellman 等人提出的,用來解決多階段決策過程問題的一種最優化方法。多階段決策過程是指把研究問題分成若干個相互聯絡的階段,由每個階段...