POJ 3040 Allowance 贪心】的更多相关文章

这题目的贪心思路还是有一点细节问题的. 还没有证明,据说是因为题目给的条件是每个价格是比它小的价格的倍数才能这么贪心的. 思路如下: 假设要给奶牛的钱为C 1)从大面值到小面值一次拿钱,能拿多少拿多少. 但是注意不能拿到的钱的总和大于C 2)如果第一步拿到的钱不够C,那么就从小面值到大面值拿钱,能拿多少拿多少. 直到拿到的钱总和大于等于C 我刚开始第一步实现的比较好,但是第二步想错了. 后来才意识到大拿到的钱尽量不要超过C很多才是最优的,所以第二步要从小到大拿 #include <iostrea…
POJ 3040 题意: 给奶牛发工资,每周至少 C 元.约翰手头上有面值V_i的硬币B_i个,这些硬币的最小公约数为硬币的最小面值.求最多能发几周? 分析: 贪心策略是使多发的面额最小(最优解).分三个阶段: 1. 首先面额不小于C的硬币属于没办法节约的类型,先统统发掉. 2. 然后对硬币面额从大到小尽量凑得接近C,允许等于或不足C,但是不能超出C. 3. 接着按硬币面额从小到大凑满C(凑满的意思是允许超出一个最小面值,ps此处的最小面值指的是硬币剩余量不为0的那些硬币中的最小面值),凑满之后…
Allowance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1842   Accepted: 763 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…
题目链接:http://poj.org/problem?id=3040 题目大意:你有n种不同面值的硬币,面值为vi的有bi个."硬币的面额均匀地分配下一个更大的面额",即下一个更大的硬币面值是此面值的倍数.你一周需要支付至少c元,没有退钱,每次只能给一周的钱.问最多能支撑几周. 首先对于面值大于c的硬币每个支撑一周.然后从大到小填充c直到填不下或刚好满,如果刚好满就打个标记.ans++.否则从小到大填充直到填满或大于.这里有一个优化,就是每次你配对出来一个方案,可以保存每种用了多少,…
Allowance 原文是English,这里就放Chinese了 Descriptions: 作为创纪录的牛奶生产的奖励,农场主约翰决定开始给Bessie奶牛一个小的每周津贴.FJ有一套硬币N种(1≤N≤20)不同的面额,每枚硬币是所有比他小的硬币面值的倍数,例如1美分硬币.5美分硬币.10美分硬币和50美分硬币.使用这些硬币,FJ每周至少给Bessie C(1 <= C <=100000000)美分.请你计算他最多能给Bessie几周   Input * 第一行N . C * 第 2..N…
贪心好题 ---. 思路: 从大到小凑C 如果不够 再从小到大补满(超过)C //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,c,ans,flag,vis[21]; struct Money{int amount,value;}money[100]; bool cmp(Money a,Money b){return a.…
零用钱大作战 题目大意:农夫和牛又搞新花样了,现在农夫想给Bessie每个星期都给一点零用钱,农夫有一堆面值的钱币,并且这个钱币都能被上一个钱币整除(1,5,10,50),并且钱币有一定数量,要你求最多可以给多少个星期超过C的零用钱? 这一题如果没有可以被整除的条件,那只能用动态规划了,但是这一题给了这个条件,那就说明,我们的组合都是满足单一原则的(比如单次组合最接近c的组合总是从大到小,再从小到大排列面额数,而没有其他组合),也就是可以贪婪算法. 这个贪婪算法可以分成三个步骤: S1:如果钱币…
http://poj.org/problem?id=3040 FJ 有n种不同面值的硬币,每种硬币都有相应的个数,大面值的硬币值总能被小面值的硬币值整除,每周需要支付 Bessie   c元,问最多能支付Bessie多少周. 这题之所以能贪心,据说关键是这句话 where each denomination of coin evenly divides the next-larger denomination. 如果没有这个限制条件,有些情况是取不到最优解的. 把面值从小到大排序,然后从尾到头开…
#include <string.h> #include <iostream> #include <queue> #include <stdio.h> using namespace std; struct product{ int deadline; int val; friend bool operator<(product n1,product n2) { return n1.val<n2.val; } }q; ]; int main()…
http://poj.org/problem?id=3614 有c头奶牛在沙滩上晒太阳,每头奶牛能忍受的阳光强度有一个最大值(max_spf) 和最小值(min_spf),奶牛有L种防晒霜,每种可以固定阳光强度在某一个值,每种的数量是cover[i] ,每头奶牛只能用一瓶防晒霜,问最多有多少头奶牛能在沙滩上晒太阳. 理解题意之后还是挺好做的. 首先确定的贪心策略是,在满足min_spf的条件下,尽量用spf小的用在max_spf大的奶牛身上,用一个最小堆维护max_spf的最小值即可. 先对奶牛…