關於拼湊面額的動態規劃演算法

2021-08-07 07:17:14 字數 815 閱讀 5102

題目描述:

給你六種面額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 等人提出的,用來解決多階段決策過程問題的一種最優化方法。多階段決策過程是指把研究問題分成若干個相互聯絡的階段,由每個階段...