硬币问题(贪心算法)

硬币问题
问题描述:
有1元、5元、10元、50元、100元、500元的硬币各C1,C5,C10,C50,C100,C500枚。现在要用这些硬币来支付A元,最少需要多少枚硬币?假设本题至少存在一种支付方案。
限制条件:
0<=C1,C5,C10,C50,C100,C500<=10的9次方
0<= A <= 10的9次方
输入:
C1 = 3
C2 = 2
C10 = 1
C50 = 3
C100 = 0
C500 = 2
A = 620
输出:
6(500元硬币1枚,50元硬币2枚,10元硬币1枚,5元硬币2枚,合计6枚)

思路:为了尽量地减少硬币的数量,我们首先得尽可能多地使用500元硬币,剩余部分尽可能多地使用100元硬币,剩余部分尽可能多地使用50元硬币,剩余部分尽可能多地使用10元硬币,再剩余部分尽可能多地使用5元硬币,最后的部分使用1元硬币支付。
也就是优先使用大面值的硬币。使用贪心算法

这个小程序就算是贪心算法的入门吧,这个算法在一些测试里面经常考,所以很有必要掌握它。

#include<bits/stdc++.h>
using namespace std;
const int V[6]={1,5,10,50,100,500};
int main(){
    int C[10];
    int A;
    for(int i=0;i<6;i++){
        cin>>C[i];
    }
    cin>>A;
    int ans=0;
    for(int i=5;i>=0;i--){
        int t=min(A/V[i],C[i]);
        A-=t*V[i];
        ans+=t;
    }
    cout<<ans<<endl;
    return 0;
}
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页