換零錢 見解

2022-03-22 18:17:56 字數 992 閱讀 7034

n元錢換為零錢,有多少不同的換法?幣值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元。

例如:5分錢換為零錢,有以下4種換法:

1、5個1分

2、1個2分3個1分

3、2個2分1個1分

4、1個5分

(由於結果可能會很大,輸出mod 10^9 + 7的結果)

input

輸入1個數n,n = 100表示1元錢。(1 <= n <= 100000)

output

輸出mod 10^9 + 7的結果

sample input

5
sample output

4
思路:就是不斷的更新dp。
用1分錢,去滿足1到n之間的錢數,可能種類為1.
用2分錢,去滿足2到n之間的錢數,其中i可能種類為,dp[i] + dp[i-2]
在此,兩個注意點,(1)為什麼從2開始,因為1的話,他不能用2去組成,也就是說他的開始就是用多少錢,作為開始,低於他,沒有辦法用他去組成,浪費時間。
(2)為什麼,是dp[i] + dp[i-2],因為你看啊,假設i = 5,他用2分錢組成的可能種類是不是以前1分錢的種類,加上dp[3]的種類。(因為3分加上2分就是5分錢,所以3分的種類,每一種加上2分錢,不都是5分錢嗎?dp[3]+2=5)此時的每乙個dp[i]代表著的就是1和2分錢組成的種類。每乙個i代表著,要組成i分錢。每乙個dp[i] = dp[i] + dp[i-b[j]],道理就是上面的解釋。
**如下:#include#includeusing namespace std;

int a[100005],dp[100005];

int main()

; int n,i,j;

cin>>n;

dp[0]=1;

for(j=0;j<13;j++)

cout<

換零錢的演算法

問題來自sicp,描述如下 現在若干紙幣,想要兌換成硬幣。硬幣面值有1,5,10,25,50分的硬幣。什麼,沒有25分的,我說的是美元。問有多少種組合方式 這是介紹線性遞迴這個概念的時候的乙個例子,很有意思。演算法嘛,很樸素啊,其主要思想如下 scheme的 就不貼上來了,太簡單太抽象。我們還是用c...

換零錢的clojure實現

題目 有半美元 四分之一美元 10美分 5美分和1美分的硬幣,將1美元換成零錢,一共有多少種不同方式?思路 首先我們把1美元變成100美分,半美元變成50美分,四分之一美元變成25美分。然後從硬幣的最大面額 50美分開始 100餘額的所有換法 採用50美分的所有換法 不採用50美分的所有換法 那麼,...

力扣 兌換零錢

題目 給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1 通過動態規劃來進行求解 首先可以將問題拆分成相等的子問題,假設dp n 等於構成n元的最少的硬幣數,那麼dp n dp n m dp...