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
5sample 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...