筆者近期無心中發現了一篇關於貪心算法的博客,寫的真好。做爲一名算法萌新,感受這篇文章來入門真心不錯,因而摘記其中一個典型的關於貪心算法的例題。 博客傳送門:從零開始學貪心算法ios
這個問題在咱們的平常生活中就更加廣泛了。假設1元、2元、5元、10元、20元、50元、100元的紙幣分別有c0, c1, c2, c3, c4, c5, c6張。如今要用這些錢來支付K元,至少要用多少張紙幣?用貪心算法的思想,很顯然,每一步儘量用面值大的紙幣便可。在平常生活中咱們天然而然也是這麼作的。在程序中已經事先將Value按照從小到大的順序排好。算法
下面上代碼:spa
#include<iostream> #include<algorithm> using namespace std; const int N=7; int Count[N]={3,0,2,1,0,3,5}; int Value[N]={1,2,5,10,20,50,100}; int solve(int money) { int num=0; for(int i=N-1;i>=0;i--) { int c=min(money/Value[i],Count[i]); money=money-c*Value[i]; num+=c; } if(money>0) num=-1; return num; } int main() { int money; cin>>money; int res=solve(money); if(res!=-1) cout<<res<<endl; else cout<<"NO"<<endl; }