您的位置:首页 > 其它

硬币问题(贪心)

2015-10-20 13:54 288 查看
有1元,5元,10元,50元,100元,500元的硬币各A1,A5,A10,A50,A100,A500枚,现在要用这些硬币支付money元,最少需要支付多少硬币?假定本题至少一种支付方案。

分析:

要使数量最少,所以要先从面值大的开始选择,依次往下类推,即可得到最佳答案。

优先选择面值大的。

#include<iostream>

#include<algorithm>

#include<stdio.h>

#include<math.h>

#include<queue>

#define L(i,n,m) for(int i = n;i >= 0;i --)

#define M(i,n,m) for(int i = n;i < m;i ++)

#define N(n,m) memset(n,m,sizeof(n));

const int V[6] = {1,5,10,50,100,500}; ///面值

using namespace std;

int main()

{

int a[6],money,sum; ///数组a为所有面值的数量有多少

while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>money)

{

sum = 0;

L(i,5,0)

{

int t = min(money/V[i],a[i]); ///找出使用面值V[i]的数量

money -= t * V[i]; ///总钱数减少

sum += t; ///数量增加

}

printf("%d\n",sum); ///输出

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: