3,881
社区成员
发帖
与我相关
我的任务
分享
#include<iostream.h>
#include<algorithm.h>
using namespace std;
typedef struct{
int T; //面值
int C; //硬币个数
}Node;
bool compare(Node &a,Node &b)
{
return a.T < b.T;
}
int seek(Node *p,int n,int m)
{
int q=m;
int t;
int sum=0;
int i;
for(i=n-1;i>=0;i--) //for(i=n;i>=0;i--)数组下标越界
{
t=(q/p[i].T);
if(t>p[i].C) t=p[i].C;//不能超过所持有的当前面值的硬币个数
q-=t*p[i].T;
sum += t;
if(q==0) break;
}
if(q==0)
{
return sum;
}else{
return -1;
}
}
int main()
{
int n;
cin>>n;
//Node a[n];
Node *a =new Node[n];
int i;
for(i=0;i<n;i++)
{
cin>>a[i].T>>a[i].C;
}
int m;
cin>>m;
sort(a,a+n,compare);
int p=seek(a,n,m);
if(p>0)
{
cout<<p;
}else{
cout<<"-1";
}
return 0;
}