题目链接:

http://poj.org/problem?id=3040

题目意思:

有n种(n<=20)面额的硬币,每种硬币面值能整除比它大的面值。给一个c,告诉每种硬币的面值和数量,求最多能够凑多少个c.

解题思路:

贪心。

对面值从大到下排序,当面值v>=c时,直接加上该种面值的数量一种就够了。

对于v<c的,从大到小,再不超过c的情况下,能装多少装多少,剩下的如果不为0,则从小到大,找到第一个>=left.

贪心原理:由于面值小的是面值大的的约数,在能够用面值大的时,如果用小的,就要用多个小的,而且还不能保证能凑到面值大的,可能更大。这样选择面值大的优。

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; struct Inf
{
int v,num;
}inf[22]; int need[22];
int n,c; bool cmp(struct Inf a,struct Inf b)
{
return a.v>b.v;
} int main()
{
while(~scanf("%d%d",&n,&c))
{
for(int i=1;i<=n;i++)
scanf("%d%d",&inf[i].v,&inf[i].num); sort(inf+1,inf+n+1,cmp);
int ans=0;
while(true)
{
memset(need,0,sizeof(need));
int sum=c;
for(int j=1;j<=n;j++)
{
int tmp=sum/inf[j].v;
tmp=min(tmp,inf[j].num);
need[j]+=tmp; //需要这么多个
sum-=tmp*inf[j].v; //还剩下的
}
if(sum>0) //不能恰好凑齐,用一个满足的最小的补
{
for(int j=n;j>=1;j--)
{
if(inf[j].num-need[j]&&inf[j].v>=sum)
{
need[j]++;
sum=0;
break;
}
}
}
if(sum>0) //再也凑不到了
break;
int Min=INF;
for(int j=1;j<=n;j++)//找到能够凑c的最多次数
if(need[j])
Min=min(Min,inf[j].num/need[j]);
ans+=Min;
for(int j=1;j<=n;j++) //减去个数
inf[j].num-=Min*need[j];
}
printf("%d\n",ans);
}
return 0;
}

贪心-poj-3040-Allowance的更多相关文章

  1. POJ 3040 Allowance【贪心】

    POJ 3040 题意: 给奶牛发工资,每周至少 C 元.约翰手头上有面值V_i的硬币B_i个,这些硬币的最小公约数为硬币的最小面值.求最多能发几周? 分析: 贪心策略是使多发的面额最小(最优解).分 ...

  2. POJ 3040 Allowance 贪心

    这题目的贪心思路还是有一点细节问题的. 还没有证明,据说是因为题目给的条件是每个价格是比它小的价格的倍数才能这么贪心的. 思路如下: 假设要给奶牛的钱为C 1)从大面值到小面值一次拿钱,能拿多少拿多少 ...

  3. poj 3040 Allowance

    Allowance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1842   Accepted: 763 Descript ...

  4. 【贪心】Allowance POJ 3040

    题目链接:http://poj.org/problem?id=3040 题目大意:你有n种不同面值的硬币,面值为vi的有bi个."硬币的面额均匀地分配下一个更大的面额",即下一个更 ...

  5. 【POJ - 3040】Allowance(贪心)

    Allowance 原文是English,这里就放Chinese了 Descriptions: 作为创纪录的牛奶生产的奖励,农场主约翰决定开始给Bessie奶牛一个小的每周津贴.FJ有一套硬币N种(1 ...

  6. POJ 3040 贪心

    贪心好题 ---. 思路: 从大到小凑C 如果不够 再从小到大补满(超过)C //By SiriusRen #include <cstdio> #include <cstring&g ...

  7. Greedy:Allowance(POJ 3040)

    零用钱大作战 题目大意:农夫和牛又搞新花样了,现在农夫想给Bessie每个星期都给一点零用钱,农夫有一堆面值的钱币,并且这个钱币都能被上一个钱币整除(1,5,10,50),并且钱币有一定数量,要你求最 ...

  8. 贪心 POJ 2586 Y2K Accounting Bug

    题目地址:http://poj.org/problem?id=2586 /* 题意:某公司要统计全年盈利状况,对于每一个月来说,如果盈利则盈利S,如果亏空则亏空D. 公司每五个月进行一次统计,全年共统 ...

  9. 贪心 POJ 1328 Radar Installation

    题目地址:http://poj.org/problem?id=1328 /* 贪心 (转载)题意:有一条海岸线,在海岸线上方是大海,海中有一些岛屿, 这些岛的位置已知,海岸线上有雷达,雷达的覆盖半径知 ...

  10. 贪心 POJ 2109 Power of Cryptography

    题目地址:http://poj.org/problem?id=2109 /* 题意:k ^ n = p,求k 1. double + pow:因为double装得下p,k = pow (p, 1 / ...

随机推荐

  1. ImageView设置点击效果没有用?ImageView src的图片大小改变不了?

    ImageView设置点击效果没有用? 解决 1.ImageView xml里面必须clickable 和longClickable为true <ImageView android:layout ...

  2. MTK Android 默认值修改笔记

    1.设置菜单: 1.1位置信息(Location)默认关闭: 请将 alps\frameworks\base\packages\SettingsProvider\res\values\default. ...

  3. Smokeping如何清空图标数据

    先停smokeping服务 service smokeping stop 进去图表数据目录 /opt/smokeping/data /bin/rm -rf ./*   重新加载/opt/smokepi ...

  4. iOS 网络与多线程--8.百度地图的使用(调用系统浏览器)

    通过调用设备自带的浏览器,打开百度地图 // 1.定义一个方法,用来打开谷歌地图的功能 -(IBAction)openMaps { // 2.定义一个字符串,作为百度地图的当前地理位置 废弃 NSSt ...

  5. XML Schema (2)

    定义元素 <!-- 1.定义元素book --> <element name="book"></element> <!-- 2.定义元素包 ...

  6. 【转】解读Qt 事件处理机制(上篇)

    [转自]:http://mobile.51cto.com/symbian-272812.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生 ...

  7. PHP连续签到

    require "./global.php"; $act = isset($_GET['act']) ? $_GET['act'] : "error"; // ...

  8. tcpdump使用和TCP/IP包分析

    关于tcpdump如何抓包,本文不再总结,可以查看 tcpdump的官方地址查看http://www.tcpdump.org 本文重点记录两个部分:           第一部分:tcpdump所抓包 ...

  9. debain 解决无法显示中文

    首先先配置编码:vim /etc/locale.gen  去掉前面的# en_US.UTF-8 UTF-8 zh_CN GB2312 zh_CN.GBK GBK zh_CN.UTF-8 UTF-8 然 ...

  10. 内联汇编和JMP到内联函数注意事项

    对于jmp类型的hook, 如果自己的过程没有使用_declspec(naked),那么系统会自动给添加一些额外的代码,控制堆栈平衡,但是这些额外的代码会破坏被hook函数的堆栈. 对于call类型的 ...