计蒜客 零花钱

编程入门 行业动态 更新时间:2024-10-07 14:32:00

计蒜客 <a href=https://www.elefans.com/category/jswz/34/1729561.html style=零花钱"/>

计蒜客 零花钱

作為创造產奶纪录的回报,Farmer  John决定开始每个星期给Bessie一点零花钱。 FJ有一些硬币,一共有N  (1  < =  N  < =  20)种不同的面额。每一个面额都能整除所有比它大的面额。 他想用给定的硬币的集合,每个星期至少给Bessie某个零花钱的数目C  (1  < =  C  < =  100000000)。请帮他计算他最多能支付多少个星期的零花钱。

输入格式:

*  第一行:  两个由空格隔开的整数:  N  和  C *  第2到第N+1行:  每一行有两个整数表示一个面额的硬币:硬币面额V  (1<=V<=100,000,000)和Farmer  John拥有的该面额的硬币数B  (1<=B<= 1,000,000).

输出格式:

*  第一行:  一个单独的整数,表示Farmer  John最多能给Bessie支付多少个星期至少為C的零用钱。

FJ想要每个星期给Bessie六美分。他有100个1美分硬币,120个5美分硬币,和一个10美分硬币。 FJ可以在一个星期超额付给Bessie一个10美分硬币。然后接下来的10个星期每星期付给 Bessie两个5美分硬币。最后100个星期每星期付给Bessie一个1美分硬币跟一个5美分硬 币。

样例输入
3 6
10 1
1 100
5 120
样例输出
111
题解:面额从大往小排。只要比C小就用面额小的一点点加。直到超过或相等,则ans++


#include<bits/stdc++.h>
using namespace std;struct node{long num;long many;
}a[21];bool cmp(node a,node b){return a.num>b.num;
}int main()
{long c;long n,ans=0;cin>>n>>c;for(int i=0; i<n; i++){cin>>a[i].num>>a[i].many;}sort(a,a+n,cmp);//将面额大的排前面while(1){int f=c;for(int i=0; i<n; i++)//找出第一个比C小的数while(a[i].many&&f-a[i].num>0)a[i].many--,f-=a[i].num;for(int i=n-1; i>=0; i--)//用小的数一点一点加上前面找出的数直到比C大或等while(a[i].many&&f>0)a[i].many--,f-=a[i].num;if(f<=0)ans++;elsebreak;}cout<<ans;return 0;
}


更多推荐

计蒜客 零花钱

本文发布于:2024-03-11 18:01:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729557.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:零花钱   计蒜客

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!