笔者近期无心中发现了一篇关于贪心算法的博客,写的真好。做为一名算法萌新,感受这篇文章来入门真心不错,因而摘记其中一个典型的关于贪心算法的例题。 博客传送门:从零开始学贪心算法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; }