給定陣列arr,arr中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim代表要找的錢數,求換錢有多少種方法。
【舉例】
arr=[5,10,25,1],aim=0。組成0元的方法有1種,就是所有面值的貨幣都不用。所以返回1。
arr=[5,10,25,1],aim=15。組成15元的方法有6種,分別為3張5元,1張10元+1張5元,1張10元+5張1元,10張1元+1張5元,2張5元+5張1元,15張1元。所以返回6。
arr=[3,5],aim=2。任何方法都無法組成2元。所以返回0。
00:56:50 開始講解 原文:經典演算法題精講(八)-從斐波那契數列學習矩陣乘法的優化技巧、從暴力遞迴到動態規劃
這個題目講的是從暴力遞迴到動態規劃:
遞迴 --> 記憶化搜尋(備忘錄方法)-- dp --> dp狀態合併
備忘錄方法:不管哪個狀態先算,遇到才算 (單引數、雙引數)
下面討論該題具體解法:arr=[5,10,25,1],aim=1000
① 遞迴:process1(index,aim),它的含義是如果⽤arr[index..n-1]這些⾯值的錢去組成aim的話,返回總共的方法數。
② dp:生成行數為n,列數為aim+1的矩陣dp,狀態dp[i][j]的含義是在使用arr[0..i]貨幣的情況下,組成錢數j有多少種方法。
正式版.pdf
動態規劃 換錢的方法數
演算法專題導航頁面 題目描述 給定陣列arr,設陣列長度為n,arr中所有的值都為正整數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim,代表要找的錢數,求換錢的方法數有多少種。由於方法的種數比較大,所以要求輸出對10 9 7進行取模後的答案。輸入描述 輸入包括...
遞迴與動態規劃 換錢的方法數
問題 給定陣列arr,arr中所有的值都為整數且不重複。每個值代表一種面值的貨幣,每種貨幣有無數張,再給定乙個整數aim代表要找的錢數,求換錢的方法有多少種。基本思路 這道題的經典之處在於它可以體現暴力遞迴 記憶搜尋 動態規劃之間的關係,並可以在動態規劃的基礎上再進行一次優化。首先介紹暴力遞迴的方法...
換錢的方法數
題目 給定陣列arr,arr中所有的值都為整數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數代表要找的錢數,求換錢有多少種方法。舉例 arr 5,10,25,1 aim 0 組成0元的方法有1種,就是所有面值的貨幣都不用。所以返回1。arr 5,10,25,1 ai...