当前位置:网站首页>零花钱
零花钱
2022-07-29 16:00:00 【封子墨】
1263: 零用钱
时间限制: 1 Sec 内存限制: 128 MB
作为创造销售纪录的回报,Farmer John决定开始每个星期给Bessie一点零花钱。 FJ有一些硬币,一共有N (1 < = N < = 20)种不同的面额。每一个面额都能整除所有比它大的面额。 他想用给定的硬币的集合,每个星期至少给Bessie某个零花钱的数目C (1 < = C < = 100000000)。请帮他计算他最多能支付多少个星期的零花钱。
输入
第1行: 两个由空格隔开的整数: N 和 C
第2到第N+1行: 每一行有两个整数表示一个面额的硬币:
硬币面额V (1 < = V < = 100,000,000)
和Farmer John拥有的该面额的硬币数B (1 < = B < = 1,000,000).
输出
输出一行: 一个单独的整数,表示FJ 最多能给Bessie支付多少个星期至少为C的零用钱。
样例输入
3 6
10 1
1 100
5 120
样例输出
111
#include<stdio.h>
#include<algorithm>
using namespace std;
struct Money {
int The_price;
int The_number;
};
int cmp(Money a,Money b) {
return a.The_price<b.The_price;
}
int main() {
int N,C,sum=0,num;
bool judge=true;
scanf("%d %d",&N,&C);
struct Money money[N];
for(int i=0; i<N; i++)
scanf("%d %d",&money[i].The_price,&money[i].The_number);
sort(money,money+N, cmp);
for(num=N-1; num>=0; num--)
if(money[num].The_price>=C)
sum+=money[num].The_number;
else break;
while(judge) {
judge=false;
int t=C;
for(int i=num; i>=0; i--) {
while(t>money[i].The_price&&money[i].The_number>0) {
t-=money[i].The_price;
money[i].The_number--;
}
}
for(int i=0; i<=num; i++) {
while(t>0&&money[i].The_number>0) {
t-=money[i].The_price;
money[i].The_number--;
}
}
if(t<=0) {
judge=true;
sum++;
}
}
printf("%d\n",sum);
}
边栏推荐
猜你喜欢
随机推荐
图文结合纯c手写内存池
干货!如何使用仪表构造SRv6-TE性能测试环境
Recommended Remote Desktop Tools
远程桌面工具推荐
Tech Talk 活动回顾|基于 Amazon KVS 打造智能视觉产品
HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
Android Studio 实现登录注册-源代码 (连接MySql数据库)
【翻译】设备管理器—英特尔网卡属性设置高级选项的功能
Tess4J 图片文字识别
[PCL study notes] Commonly used libraries and APIs for point cloud processing (PCL library Eigen)
【Swoole系列3.2】Swoole 异步进程服务系统
Rust P2P网络应用实战-1 P2P网络核心概念及Ping程序
uni-app进阶之Weex/nvu
中小型金融企业该如何进行灾备建设?
SAP ABAP OData 服务诊断工具 /IWFND/ERROR_LOG 的使用方法试读版
Easy Genes: Human tRNA loci exhibit DNA hypermethylation associated with aging | Research Article
Staggered question explanation
异步请求池的实现
面试官:设计原则有哪些?什么是里式替换原则?
BUUCTF——MISC(流量分析)