P2376 [USACO09OCT]津贴Allowance

P2376 [USACO09OCT]津贴Allowance

题目背景

作为学习刻苦、成绩优秀的回报,妈妈决定开始每个星期给杀马特一点零花钱。

题目描述

作为创造产奶纪录的回报,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)拥有的该面额的硬币数B (1 <= B <= 1,000,000)。

输出格式:

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

输入输出样例

输入样例#1:

3 6
10 1
1 100
5 120

输出样例#1:

111

说明

【样例说明】

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

分析:贪心。

因为每一个面额都能整除所有比它大的面额。所以小的面额的硬币一定可以凑成大的硬币。

所以我们可以先按照货币面值大小排序,从大到小开始,如果比 c 大,直接加上这个面值的硬币的数量,如果不能达到,拿小的凑。

 1 #include<cstdio>
 2 #include<algorithm>
 3
 4 using namespace std;
 5
 6 struct moy{
 7     int x,y;
 8     bool operator < (const moy a) const
 9     {
10         return x < a.x;
11     }
12 }t[25];
13 int h[25];    //已经使用的硬币数
14 int n,c,p,ans;
15
16 int main()
17 {
18     scanf("%d%d",&n,&c);
19     for (int i=1; i<=n; ++i)
20         scanf("%d%d",&t[i].x,&t[i].y);
21
22     sort(t+1,t+n+1);
23     p = n+1;
24     while (t[--p].x>=c) ans += t[p].y;
25     while (1)
26     {
27         int s = c;    //s剩余的钱
28         for (int i=p; i>=1; --i)
29         {
30             int cnt = min(t[i].y, s/t[i].x);
31             s -= t[i].x*cnt;    //cnt使用硬币的数量
32             h[i] = cnt;
33         }
34         if (s>0)
35             for (int i=1; i<=p && s>0; ++i)
36                 if (t[i].y>h[i]) s -= t[i].x, h[i]++;
37         if (s<=0)
38         {
39             int cnt = 1e9;
40             for (int i=1; i<=p; ++i)
41                 if (h[i]) cnt = min(cnt,t[i].y/h[i]);    //cnt有多少可以这样,搭配的组合
42             ans += cnt;
43             for (int i=1; i<=p; ++i)
44                 if (h[i]) t[i].y -= cnt*h[i];
45         }
46         else break;
47     }
48     printf("%d",ans);
49     return 0;
50 }
时间: 2024-08-01 22:57:38

P2376 [USACO09OCT]津贴Allowance的相关文章

C++ 实验七 继承与派生

1. 设计一个Person类,它有两个派生类Student和Employee,Employee有两个派生类Faculty和Staff. •Person类有一个string类型的名字name,string型的身份号id,string型的电话号码phonenumber, Person类构造函数的对应name的参数不能有默认形参值. •Student类有一个年级grade属性(Freshman.Sophomore.Junior或Senior),将属性值定义为常量: •Employee类有一个strin

[SinGuLaRiTy] 贪心题目复习

[SinGuLaRiTy-1024] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [POJ 2709] 颜料 (Painter) 题目描述 杂货店出售一种由N(3<=N<=12)种不同颜色的颜料,每种一瓶(50ML),组成的颜料套装.你现在需要使用这N种颜料:不但如此,你还需要一定数量的灰色颜料.杂货店从来不出售灰色颜料——也就是它不属于这N种之一.幸运的是,灰色颜料是比较好配置的,如果你取出三种不同颜色的颜料各x ml,混合起来就

BZOJ(begin) 1333 [Usaco2005 Oct]Allowance 津贴:贪心【给硬币问题】

题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=1333 题意: 有n种不同币值的硬币,并保证大币值一定是小币值的倍数. 每种硬币的币值为val,数量为cnt. 每个月你要给Bessie发金额为c的津贴(可以比c多,但不能少). 问你最多能发多少个月. 题解: 贪心. 贪心策略: (1)如果能恰好凑出c的钱,则应尽可能使用大币值的硬币. (2)如果不能恰好凑出,则应让花的冤枉钱尽可能少. 实现: 先按币值从大到小排序... (1)在保

P2639 [USACO09OCT]Bessie的体重问题Bessie&#39;s We…

题目描述 Bessie像她的诸多姊妹一样,因为从Farmer John的草地吃了太多美味的草而长出了太多的赘肉.所以FJ将她置于一个及其严格的节食计划之中.她每天不能吃多过H (5 <= H <= 45,000)公斤的干草. Bessie只能吃一整捆干草:当她开始吃一捆干草的之后就再也停不下来了.她有一个完整的N (1 <= N <= 500)捆可以给她当作晚餐的干草的清单.她自然想要尽量吃到更多的干草.很自然地,每捆干草只能被吃一次(即使在列表中相同的重量可能出现2次,但是这表示

洛谷——P2639 [USACO09OCT]Bessie的体重问题Bessie&#39;s We…

https://www.luogu.org/problem/show?pid=2639 题目描述 Bessie像她的诸多姊妹一样,因为从Farmer John的草地吃了太多美味的草而长出了太多的赘肉.所以FJ将她置于一个及其严格的节食计划之中.她每天不能吃多过H (5 <= H <= 45,000)公斤的干草. Bessie只能吃一整捆干草:当她开始吃一捆干草的之后就再也停不下来了.她有一个完整的N (1 <= N <= 500)捆可以给她当作晚餐的干草的清单.她自然想要尽量吃到更

poj 3040 Allowance

Allowance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3008   Accepted: 1218 Description As a reward for record milk production, Farmer John has decided to start paying Bessie the cow a small weekly allowance. FJ has a set of coins in

P1339 [USACO09OCT]热浪Heat Wave

P1339 [USACO09OCT]热浪Heat Wave 题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for good eating but are not so adept at creating creamy delicious dairy products. Farmer John is leading the charge to delive

luogu P2639 [USACO09OCT]Bessie的体重问题Bessie&#39;s We…

题目描述 Bessie像她的诸多姊妹一样,因为从Farmer John的草地吃了太多美味的草而长出了太多的赘肉.所以FJ将她置于一个及其严格的节食计划之中.她每天不能吃多过H (5 <= H <= 45,000)公斤的干草. Bessie只能吃一整捆干草:当她开始吃一捆干草的之后就再也停不下来了.她有一个完整的N (1 <= N <= 500)捆可以给她当作晚餐的干草的清单.她自然想要尽量吃到更多的干草.很自然地,每捆干草只能被吃一次(即使在列表中相同的重量可能出现2次,但是这表示

[POJ3040] Allowance

Description As a reward for record milk production, Farmer John has decided to start paying Bessie the cow a small weekly allowance. FJ has a set of coins in N (1 <= N <= 20) different denominations, where each denomination of coin evenly divides th