思路:每次选择最大的面值
#include<bits/stdc++.h>
using namespace std;
/*
问题描述
有1元、5元、10元、50元、100元、500元的硬币各C1、C5、C10、C50、C100、C500枚,
先要用这些硬币来支付A元,最少需要多少枚硬币?假定本题存在解。
输入
C1=3,C2=2,C10=1,C50=33,C100=0,C500=2,A=620
输出
6
*/
const int v[6]={1,5,10,50,100,500};//记录面值
int c[6]; //存储有多少硬币
int A;
void solve(){
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;
}
int main(){
for(int i=0;i<6;i++) cin>>c[i];
cin>>A;
solve();
return 0;
}