随笔分类 -  贪心

EOJ 2450 sunny的队列
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=2450用单调队列 queue[] 维护一个可能作为最大值的序列,由贪心策略,这个序列是单调减的。扫描到元素 a[i] 时, 这个序列满足:1.始终保持队首元素是[i-k+1, i-1]的最大值。 (即 如果队首不在当前区间[i-k+1, i]中,则出队)2.队中其余元素则是将来队首出队后可能的最大值。综上,该算法是 O(n)的, 比 线段树 要快呢。参考链接: http://wenku.baidu.com/view/4d23b4d128ea81c758f578ae.html 1 #includ.. 阅读全文

posted @ 2013-09-07 22:14 KimKyeYu 阅读(307) 评论(0) 推荐(0)

EOJ 2377 Sequence
摘要:http://www.acm.cs.ecnu.edu.cn/problem.php?problemid=2377用一个单调递减栈来实现贪心的思路——先合并小的。单调栈则是用来保存那些较大的(暂不该合并的)元素。单调栈依然不会用。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 #define MAXN 1000 阅读全文

posted @ 2013-09-05 21:24 KimKyeYu 阅读(156) 评论(0) 推荐(0)

EOJ-1765 Nested Dolls
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=1765题意:给出一系列物体的宽与高,满足w1 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 using namespace std;17 struct node{18 int w,h;19 }a[20005];20 bool c... 阅读全文

posted @ 2013-07-23 03:54 KimKyeYu 阅读(257) 评论(1) 推荐(0)

EOJ-1855 Expedition
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=1855题意:一辆车每行驶一单位的路程就消耗一单位的油,给出n个加油站以及他们的位置和可加油量,给出初始油量P和车与目的地的位置L,求需要加油的最少次数。思路:贪心,先把初始P全部耗尽看能走的路程是否超过L,否则就加一次油。将新路程加上当前途中经过的加油站能加油量的最大值,直到能行驶的路程大于等于L。因为考虑加油量有重复的情况,这里用了堆,优先队列,每次出队的是队内元素的最大值。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #in 阅读全文

posted @ 2013-07-08 00:49 KimKyeYu 阅读(395) 评论(0) 推荐(0)

poj 1862 Stripies
摘要:http://poj.org/problem?id=1862题意描述: 有n个生物,体重为w1, w2, ... , wn;任意两个生物可合成为一个生物;其体重w'满足:w' = 2sqrt(wi * wj); 如此反复,终将得到一个生物,体重为W。适当调整合成顺序,使得W最小。思路:贪心 每次取体重最大的两个生物先合成。证明: 不妨设w1>w2>...>wn, f(a, b) = 2sqrt(a*b); 那么按照贪心策略: W = f(f(... f(f(w1, w2), w3) ...), wn); (1)Hint:(1)式正确,是因为f(w1, w2)合 阅读全文

posted @ 2013-06-10 21:09 KimKyeYu 阅读(193) 评论(0) 推荐(0)

EOJ-2927 负载平衡问题
摘要:链接:http://www.acm.cs.ecnu.edu.cn/problem.php?problemid=2927 这道题用了均分纸牌的方法 开始容易想到在所有的仓库中找到最多的库存量,然后向小的仓库移动,一直到所有的货物都相等,但关键是不知道往哪个方向上移动才能达到移动次数最少。设a[i]为第i个仓库的库存量(0<=i<=n),ave为均分后每个仓库的库存量,ans为最小移到次数。我们按照由左而右的顺序移动货物。若第i个仓库的库存量a[i]超出平均值,则移动一次(ans+1),将超出部分留给下一个仓库,既第i+1个仓库的库存量增加a[i]-ave;若第i个仓库的库存量a[i] 阅读全文

posted @ 2013-06-09 12:34 KimKyeYu 阅读(263) 评论(0) 推荐(0)

导航