有陣列penny,penny中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim(小於等於1000)代表要找的錢數,求換錢有多少種方法。
給定陣列penny及它的大小(小於等於50),同時給定乙個整數aim,請返回有多少種方法可以湊成aim。
測試樣例:
[1,2,4],3,3
返回:2方法一(暴力搜尋法)
class exchange
int foo(const vector& arr, int index, int aim)
return ret;
}};
方法二(記憶化搜尋方法)
class exchange
if (penny.empty() || aim == 0) return 0;
return foo(penny, 0, n,aim,dp);
}int foo(const vector& arr, int index, int n,int aim,int (*dp)[1000])
else
else}}
dp[index][aim]=(res==0)?-1:res;
return res;
}};
方法三(動態規劃方法)
class exchange
else
}for(int i=1;i}
return dp[n-1][aim];
}};
找零問題 動態規劃
當乙個幣值組合用貪婪演算法不能找出最優解的時候,比如對於 1,2,5 7,10。如果找14元錢的話,貪婪演算法答案是10,2,2,但最優解為7,7。那麼利用動態規劃就能找出最優解,只是時間和空間複雜度都很高,o nm 首先寫出狀態方程 f i 1,x 如果v i x 即當如果當前選擇的幣值大於找零的...
硬幣找零問題(動態規劃)
給定指定的硬幣種類,面值為 1,3,5 在此具體化些 給定所找零的錢數 sum,給出最少的硬幣找零數,每個種類的硬幣無限使用。看到這問題,當時我想到用貪心演算法來求解,最後求解方案因為巧合對了,後來在網上看到動態規劃的題目,才知道貪心演算法得不到最優解,比如 給定 面值為 1,3,4,給定找零數為 ...
硬幣找零問題 動態規劃問題
看到了 這文章,由於我不太懂他的 所以我按他的題和思路,寫了 思路我就不寫了,就是動態規劃的思路,先保證區域性最優,再慢慢向全區域性最優 include include include include using namespace std const int m 100 int coinsum m...