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

题意:

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

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

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

  问你最多能发多少个月。

题解:

  贪心。

  贪心策略:

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

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

  实现:

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

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

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

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX_N 25 using namespace std; struct Coin
{
int val;
int cnt;
Coin(int _val,int _cnt)
{
val=_val;
cnt=_cnt;
}
Coin(){}
friend bool operator < (const Coin &a,const Coin &b)
{
return a.val>b.val;
}
}; int n,c;
int ans=;
Coin coin[MAX_N]; bool pay()
{
int rest=c;
for(int i=;i<n;i++)
{
int temp=min(coin[i].cnt,rest/coin[i].val);
coin[i].cnt-=temp;
rest-=temp*coin[i].val;
}
if(rest==) return true;
for(int i=n-;i>=;i--)
{
if(coin[i].cnt!=)
{
coin[i].cnt--;
return true;
}
}
return false;
} int main()
{
cin>>n>>c;
for(int i=;i<n;i++)
{
cin>>coin[i].val>>coin[i].cnt;
}
sort(coin,coin+n);
while(pay()) ans++;
cout<<ans<<endl;
}

BZOJ 1685 [Usaco2005 Oct]Allowance 津贴:贪心【给硬币问题】的更多相关文章

  1. bzoj:1685 [Usaco2005 Oct]Allowance 津贴

    Description As a reward for record milk production, Farmer John has decided to start paying Bessie t ...

  2. 【BZOJ】1685: [Usaco2005 Oct]Allowance 津贴(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1685 由于每个小的都能整除大的,那么我们在取完大的以后(不超过c)后,再取一个最小的数来补充,可以证 ...

  3. BZOJ1685: [Usaco2005 Oct]Allowance 津贴

    [传送门:BZOJ1685] 简要题意: 贝西工作勤勤恳恳,她每月向约翰索要C 元钱作为工资.约翰手上有不少钱,他一共有N 种面 额的钞票.第i 种钞票的面额记作Vi,约翰有Ki 张.钞票的面额设定是 ...

  4. BZOJ 1684: [Usaco2005 Oct]Close Encounter

    题目 1684: [Usaco2005 Oct]Close Encounter Time Limit: 5 Sec  Memory Limit: 64 MB Description Lacking e ...

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

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

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

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

  7. 1684: [Usaco2005 Oct]Close Encounter

    1684: [Usaco2005 Oct]Close Encounter Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 387  Solved: 181[ ...

  8. [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)

    [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...

  9. bzoj1745: [Usaco2005 oct]Flying Right 飞行航班(贪心+map)

    之前做过一道基本一样的题目,抽象出来就是有个容量为c的载体,一些线段上某个点到另一个点要运输w个东西,求从头到尾最多能运多少东西. 这种模型可以用贪心做,用map,map[r]表示r的那个点,我们准备 ...

随机推荐

  1. Android常用资源

    Eclipse ADT http://developer.android.com/sdk/installing/installing-adt.html https://dl-ssl.google.co ...

  2. C#高级编程---暂停计划

    学了两个半月的C#高级编程这本书,看到了第三部分,说实话,我有点怂了,我认怂,临时先放一下,博客暂停,由于我的水平确实不会了,在写下去也是自欺欺人,我决定先研究研究我比較喜欢的脚本语言JS,開始写的, ...

  3. Source Insight 4.0 破解和使用

    参考出处: https://blog.csdn.net/u011604775/article/details/81698062 https://blog.csdn.net/user11223344ab ...

  4. Snubber电路

    http://www.elecfans.com/yuanqijian/dianrongqi/20170601520736.html https://wenku.baidu.com/view/166f1 ...

  5. linux下安装redis报错问题。

    1.使用tar -xzvf redis-2.4.5.tar.gz来解压安装包 2.使用make命令来编译Redis 如果出现错误需要查看是否缺少gcc gcc-c++ zmalloc.h:50:31: ...

  6. linux SPI驱动——spidev之deive(五)

    1.定义board设备 1: struct spi_board_info { 2: /* the device name and module name are coupled, like platf ...

  7. PHP中__get()和__set()的用法实例详解

    php面向对象_get(),_set()的用法 一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__ge ...

  8. ThinkPHP学习笔记(二)

    1.比较好的参考手册(非官方,注意:也有一些错误,当出不来想要的效果时以官方的手册为准):http://www.5idev.com/p-thinkphp_lib_vendor.shtml 2.加载自定 ...

  9. oc中 中文到拼音的转换

    偶然发现的一个好玩的功能

  10. 在ios中使用单例模式编程

    本文转载至 http://blog.csdn.net/remote_roamer/article/details/7107007     1.    @implementation Singleton ...