题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=1333

题意:

  有n种不同币值的硬币,并保证大币值一定是小币值的倍数。

  每种硬币的币值为val,数量为cnt。

  每个月你要给Bessie发金额为c的津贴(可以比c多,但不能少)。

  问你最多能发多少个月。

题解:

  贪心。

  贪心策略:

    (1)如果能恰好凑出c的钱,则应尽可能使用大币值的硬币。

    (2)如果不能恰好凑出,则应让花的冤枉钱尽可能少。

  实现:

    先按币值从大到小排序。。。

    (1)在保证不花冤枉钱的前提下,尽可能使用大硬币。

    (2)如果没凑够c,则再付一个币值最小的硬币。(在第一步之后,再任意给出一个硬币都会使总付出大于c)

AC Code:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <algorithm>
 5 #define MAX_N 25
 6
 7 using namespace std;
 8
 9 struct Coin
10 {
11     int val;
12     int cnt;
13     Coin(int _val,int _cnt)
14     {
15         val=_val;
16         cnt=_cnt;
17     }
18     Coin(){}
19     friend bool operator < (const Coin &a,const Coin &b)
20     {
21         return a.val>b.val;
22     }
23 };
24
25 int n,c;
26 int ans=0;
27 Coin coin[MAX_N];
28
29 bool pay()
30 {
31     int rest=c;
32     for(int i=0;i<n;i++)
33     {
34         int temp=min(coin[i].cnt,rest/coin[i].val);
35         coin[i].cnt-=temp;
36         rest-=temp*coin[i].val;
37     }
38     if(rest==0) return true;
39     for(int i=n-1;i>=0;i--)
40     {
41         if(coin[i].cnt!=0)
42         {
43             coin[i].cnt--;
44             return true;
45         }
46     }
47     return false;
48 }
49
50 int main()
51 {
52     cin>>n>>c;
53     for(int i=0;i<n;i++)
54     {
55         cin>>coin[i].val>>coin[i].cnt;
56     }
57     sort(coin,coin+n);
58     while(pay()) ans++;
59     cout<<ans<<endl;
60 }

转载于:https://www.cnblogs.com/Leohh/p/7565240.html

BZOJ 1685 [Usaco2005 Oct]Allowance 津贴:贪心【给硬币问题】相关推荐

  1. bzoj 1685: [Usaco2005 Oct]Allowance 津贴(贪心)

    1685: [Usaco2005 Oct]Allowance 津贴 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 264  Solved: 195 [S ...

  2. bzoj 1684: [Usaco2005 Oct]Close Encounter【数学(?)】

    枚举分母,然后离他最近的分子只有两个,分别判断一下能不能用来更新答案即可 #include<iostream> #include<cstdio> #include<cma ...

  3. bzoj1745[Usaco2005 oct]Flying Right 飞行航班*

    bzoj1745[Usaco2005 oct]Flying Right 飞行航班 题意: n个农场,有k群牛要从一个农场到另一个农场(每群由一只或几只奶牛组成)飞机白天从农场1到农场n,晚上从农场n到 ...

  4. bzoj1684[Usaco2005 Oct]Close Encounter*

    bzoj1684[Usaco2005 Oct]Close Encounter 题意: 找一个分数它最接近给出一个分数.你要找的分数的分子分母的范围在1..32767. 题解: 枚举所求分数的分子,用其 ...

  5. BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2151 是 hydro 的 BZOJ ...

  6. BZOJ 2135 刷题计划(贪心,求导,二分)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2135 是 hydro 的 BZOJ ...

  7. BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )

    数据 n <= 30000 , 然后 O( n² ) 的贪心也过了..... USACO 数据是有多弱啊 = = ( ps : BZOJ 1640 和此题一模一样 , 双倍经验 ) ------ ...

  8. bzoj 3386 bzoj 3408: [Usaco2009 Oct]Heat Wave 热浪(最短路)

    3408: [Usaco2009 Oct]Heat Wave 热浪 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 301  Solved: 223 [ ...

  9. poj 3040 Allowance (贪心

    作为创纪录的牛奶生产的奖励,农场主约翰决定开始给Bessie奶牛一个小的每周津贴.FJ有一套硬币N种(1≤N≤20)不同的面额,每枚硬币是所有比他小的硬币面值的倍数,例如1美分硬币.5美分硬币.10美 ...

最新文章

  1. Linux下C/C++编译环境搭建
  2. Xamarin开发Android笔记:使用ZXing进行连续扫描
  3. Linux下判断cpu物理个数,几核,是超线程还是多核心
  4. 工具杂记-notepad++正则表达式匹配替换
  5. poj 3280 区间dp
  6. idea展现目录清晰方式
  7. 【原神】元素反应机制
  8. 显控触摸屏编程手册_深圳显控AKWORKSHOP触摸屏与ALLENBRADLEY通讯手册.pdf
  9. 标签制作软件如何制作圆形标签中的弧形文字
  10. 新一代HTAP数据库崛起,MySQL生态的最佳归宿?
  11. 类似于计算机的文件管理器,XYplorer 21比电脑自带的文件管理器还好用的工具
  12. 软件工程导论第六版 第一章 软件工程学概述知识点总结(下)
  13. angular ts 表格_Angular8 ui-grid替代方案ag-grid入门
  14. 导入semantic-ui-css/semantic.min.css样式失败
  15. iMeta | 林雁冰/James M. Tiedje/谷洁等揭示菌群对寄生植物列当的调控作用
  16. Linux文件类型之 管道
  17. 使用MAC进行软件开发
  18. 人工神经网络 经验公式_文科生看了会沉默,理科生看了会流泪的物理公式!你知道几个?(看完长见识)...
  19. 【2022-01-06】验证码合集
  20. 合肥市第 34 届青少年信息学(计算机)奥林匹克竞赛小学组试题

热门文章

  1. 几种常用通信协议:IIC协议、SPI协议、UART协议
  2. 蒙面也能识别?俄罗斯开发新技术,伪装犯罪将在监控下无处遁行
  3. 系统学习机器学习之决策树
  4. mysql画事实表_sql生成事实表数据库
  5. mysql使用shell脚本部署_shell脚本部署mysql主从
  6. boostrap 鼠标滚轮滑动图片_BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)...
  7. pythonset操作教程_Python集合(set)方式和使用方法
  8. SSM框架的搭建(idea)
  9. 思科ssh验证方式_SSH的应用:一个实例两种验证模式的实现
  10. oracle shutdown 默认,Oracle的shutdown命令