首页 > 技术文章 > 硬币问题

caijiaming 2018-08-03 10:42 原文

有1、5、10、50、100、500元的硬币各c0、c1、c2、c3、c4、c5个,现在要用这些硬币来支付sum元,最少要多少枚硬币?  假定本题至少存在一种方案

输入

3 2 1 3 0 2 620

输出

6

看代码

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e2+10;
const int maxk=1e4+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int va[6]={1,5,10,50,100,500};
int c[6];
int sum;
void solve()
{
    int ans=0;
    for(int i=5;i>=0;i--)
    {
        int t=min(sum/va[i],c[i]);
        ans+=t;
        sum-=t*va[i];
    }
    cout<<ans<<endl;
}
int main()
{
    for(int i=0;i<6;i++)
        cin>>c[i];
    cin>>sum;
    solve();
    return 0;
}

 

推荐阅读