
贪心算法
文章平均质量分 64
徐州牧
这个作者很懒,什么都没留下…
展开
-
poj解题报告——2586
#includevoid main(){ double s,d; int surplus; int flag; while(scanf("%lf%lf",&s,&d)!=EOF) { flag=0; surplus=0; if(s>=4*d) flag=1;原创 2014-11-16 18:13:50 · 463 阅读 · 0 评论 -
poj解题报告——1323
题意:n个人在玩牌,每个人有m张牌,于是就有n*m张牌(每张牌都有一个值,介于1到n*m之间,不重复),然后进行m轮游戏,每轮每个人都出一张牌,牌最大的那个人就赢了,然后给出n和m,以及你的m张牌,问你最多能赢几轮? 题解:从n*m开始递减到1,检查每张牌,如果该牌自己是否有,如果没有,则++n1(表示能赢自己其余牌的牌数),如果有,判断n1是否为0,如果是,那么能赢的局数就加一原创 2015-07-22 19:47:06 · 536 阅读 · 0 评论 -
poj解题报告——1042
本题是一道贪心算法 贪心方法: 1. 枚举到的最远的一个湖泊,首先算好路上的总共时间(路程); 2.接着算出剩余钓鱼次数k. 3.设dij表示第i个湖泊第j次钓能钓到多少,算出前x个湖泊的所有情况 4.排序取前k个相加 再把时间加上就是答案.#include#include#include#inc原创 2015-07-22 10:15:49 · 491 阅读 · 0 评论 -
poj解题报告——2313
开始假设b[i] = a[i](1 Mid(b[i - 1], a[i], b[i + 1]) (2 <= i <= n - 1), mid(x, y, z)表示x, y, z中数值居中间的数}这个画下数轴就知道了,则b[i]=mid(b[i - 1], a[i], b[i + 1]),直到没有以上所说的i,所得的b数列即为所求,按公式求sum, 输出。#include#inclu原创 2015-07-28 13:36:05 · 1018 阅读 · 0 评论 -
poj解题报告——2976
设最后的结果k,那么(a1+a2+a3+.....)/(b1+b2+b3+....)=k,转换一下(a1-k*b1)+(a2-k*b2)+......=0,那么可以知道任取k个差值要尽量大,那么也就是说若后面结果是大于0的,那么肯定可以找到更大的值满足要求。#include#include#include#includeusing namespace std;const int原创 2015-07-11 12:31:03 · 533 阅读 · 0 评论 -
poj解题报告——2054
处理思路:利用贪心思想,每次取权值最大的节点,不断的将权值最大节点与它的父节点合并。 过程: 1、初始时将序列中的time[i]都置为1,w[i]置为c[i]; 2、查找最大的w[i], 返回其位置; 3、将该位置的c[ ]与它的父节点c[ ]合并(合并过程就是C_i / T_i,C_i = c[该节点] + c[父节点],T_i原创 2015-03-06 15:39:25 · 631 阅读 · 0 评论 -
poj解题报告——1017
题意:一个工厂制造的产品形状都是长方体盒子,它们的高度都是 h,长和宽都相等,一共有六个型号,分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体箱子包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的箱子数量。 解析: 6*6的盒子,每个盒子独占一个箱子。 5*5的盒原创 2015-03-05 12:58:28 · 922 阅读 · 0 评论 -
poj解题报告——1862
题意:给定你一系列的数,任意挑选其中两个数a和b,得到一个新的数2*sqrt(a*b),然后再将这个新的个放回。一直这样下去,直到只剩下一个数。求剩下的这个数最小是多少。 使用贪心策略,不断挑选两个最大的数组成一个新的数并放回原数列,再挑选最大的两个数……最到只乘一个数为止。代码如下#include#include#includeint n;int f[105];原创 2015-03-04 12:10:16 · 437 阅读 · 0 评论 -
poj解题报告——2325
题目读了好长时间,郁闷。 题意:给定一个数N,求一个数M,要求:将M的各个位的数相乘得到N,M最小。思路:用到高精度除法,将给定的数从9开始试除,接着试除8,7,6,5,4,3,2.若结果 N仍大于一位数,则说明N有大于10的质因子,否则,倒序输出试除到数。 关键在于一开始我没想到是倒着由大到小除,看了别人的解释才明白的。代码如下#include原创 2015-03-03 12:08:08 · 571 阅读 · 0 评论 -
poj解题报告——1922
好久不做贪心算法了,这次又开工了。 题意:一个叫Charley的人在0秒的时候在Wanliu门口等同学骑单车载他去Yanyuan(题目中给出其他单车的速度以及出发时间),当有其他单车超过Charley时,他会跳上那辆快车继续前进,问最后Charley用了多长时间到达Yanyuan。代码如下#includevoid main(){ int n; double s,原创 2015-03-02 11:13:52 · 475 阅读 · 0 评论 -
poj解题报告——2370
daima#include#includeint cmp(const int *a,const int *b){return *(int *)a-*(int *)b;}void main(){int i,k,a[100],sum;while(scanf("%d",&k)!=EOF){for(i=0;i{scanf("%d",&a[i]);原创 2014-11-18 09:28:42 · 466 阅读 · 0 评论 -
poj解题报告——1328
不得不说,这题是让我饱受折磨,毕竟第一次做贪心算法,而且WA了好多次,幸好有学长的帮助,最终找到了问题所在,是在快排上是问题,double高位不可向int低位转换,由于一开始强制转换导致虽然样例和其他的测试数据过了,但还是WA,现在改完了就对了,附上AC代码,ps:这题通过率是22%,真心不简单代码如下#include#include#includestruct poi原创 2014-11-15 14:05:47 · 541 阅读 · 0 评论 -
poj解题报告——3069
从最左边开始考虑。对于这个点,到其距离以内的范围内必须要带有标记的点。(此点位于最左边,所以显然)带有标记的这个点一定在此点右侧(包含这个点自身)#include#includeusing namespace std;int N,R;int X[1002];void solve(){ sort(X,X+N); int i=0,ans=0; while(i<N) { in原创 2015-09-14 20:02:47 · 674 阅读 · 0 评论