贪心-poj-3040-Allowance
题目链接:
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的更多相关文章
- POJ 3040 Allowance【贪心】
POJ 3040 题意: 给奶牛发工资,每周至少 C 元.约翰手头上有面值V_i的硬币B_i个,这些硬币的最小公约数为硬币的最小面值.求最多能发几周? 分析: 贪心策略是使多发的面额最小(最优解).分 ...
- POJ 3040 Allowance 贪心
这题目的贪心思路还是有一点细节问题的. 还没有证明,据说是因为题目给的条件是每个价格是比它小的价格的倍数才能这么贪心的. 思路如下: 假设要给奶牛的钱为C 1)从大面值到小面值一次拿钱,能拿多少拿多少 ...
- poj 3040 Allowance
Allowance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1842 Accepted: 763 Descript ...
- 【贪心】Allowance POJ 3040
题目链接:http://poj.org/problem?id=3040 题目大意:你有n种不同面值的硬币,面值为vi的有bi个."硬币的面额均匀地分配下一个更大的面额",即下一个更 ...
- 【POJ - 3040】Allowance(贪心)
Allowance 原文是English,这里就放Chinese了 Descriptions: 作为创纪录的牛奶生产的奖励,农场主约翰决定开始给Bessie奶牛一个小的每周津贴.FJ有一套硬币N种(1 ...
- POJ 3040 贪心
贪心好题 ---. 思路: 从大到小凑C 如果不够 再从小到大补满(超过)C //By SiriusRen #include <cstdio> #include <cstring&g ...
- Greedy:Allowance(POJ 3040)
零用钱大作战 题目大意:农夫和牛又搞新花样了,现在农夫想给Bessie每个星期都给一点零用钱,农夫有一堆面值的钱币,并且这个钱币都能被上一个钱币整除(1,5,10,50),并且钱币有一定数量,要你求最 ...
- 贪心 POJ 2586 Y2K Accounting Bug
题目地址:http://poj.org/problem?id=2586 /* 题意:某公司要统计全年盈利状况,对于每一个月来说,如果盈利则盈利S,如果亏空则亏空D. 公司每五个月进行一次统计,全年共统 ...
- 贪心 POJ 1328 Radar Installation
题目地址:http://poj.org/problem?id=1328 /* 贪心 (转载)题意:有一条海岸线,在海岸线上方是大海,海中有一些岛屿, 这些岛的位置已知,海岸线上有雷达,雷达的覆盖半径知 ...
- 贪心 POJ 2109 Power of Cryptography
题目地址:http://poj.org/problem?id=2109 /* 题意:k ^ n = p,求k 1. double + pow:因为double装得下p,k = pow (p, 1 / ...
随机推荐
- 利用反射的特性将DataReader对象转化为List集合
问题:将SqlDataReader对象转换为List<T>集合 思路: 1,利用反射的特性得到对应实体Model的公共属性 Type type = typeof(T); PropertyI ...
- table的border-collapse属性与border-spacing属性
table border-collapse:collapse; 表示边框合并在一起. border-collapse:separate;表示边框之间的间距,间距的大小用border-spacing:p ...
- Examples_08_03
访问本地程序.http://192.168.1.103/preg_match/test.php,如果换成localhost或者127.0.0.1,则会导致无法访问. http://blog.csdn. ...
- Linq中字段数据类型转换问题(Linq to entity,LINQ to Entities 不识别方法"System.String ToString()"问题解决)
1.在工作中碰到这样一个问题: 使用linq时,需要查询两个表,在这两张表中关联字段分别是int,和varchar()也就是string,在linq中对这两个字段进行关联, 如果强制类型转换两个不同类 ...
- 自定义分页标签,并使分页标签能获得url中的参数
如题,要实现一个分页功能,其次,要让分页标签“智能一点”,在分页时能自动带上url后面的参数 <tag> <description>分页标签</description&g ...
- C++ 约瑟夫环
约瑟夫环: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周 ...
- Android自定义扁平化对话框
平时我们开发的大多数的Android.iOS的APP,它们的风格都是拟物化设计.如今Android 4.X.iOS 7.WP8采用的是扁平化设计,可以看出扁平化设计是未来UI设计的趋势.其实扁平化设计 ...
- JS浏览器关闭时清空cookie
function addCookie(objName,objValue,objHours){ var str = objName + "=" + escape(objValu ...
- php本页面调试报错配置
ini_set('display_errors', 'On'); ini_set('memory_limit', '64M'); //报错,详细 error_reporting(E_ALL); //不 ...
- 2.1 Java I/O简史
Java 1.0 到 1.3 中的 IO 没有而 Java 1.4 中引入的 NIO 有的“改进”:非阻塞IO.缓冲区.通道层.字符集.内存数据.Perl(正则表达式之王): 下一代 I/O-NIO. ...