
贪心
keyboarder_zsq
你所认为的极限,其实是别人的起点。
展开
-
POJ1700 【经典过河问题,贪心】
题意: n个人过河, 船每次只能坐两个人, 然后船载每个人过河的所需时间不同, 问最快的过河时间。 思路: 仅仅启发一下思维: 我相信很多人一下子的想法就会有,每次最快和那些慢的过去,然后让最快一直来回,最后全部到对岸。 但是还有一种情况,我说说看,弱仅仅是想给大家一点思考,毕竟有意思。 你先让两个快的人从A过去至B,然后挑一个人回来至A,留下一个快的在B。OK,回来以后我让两个最原创 2016-07-27 00:14:36 · 1276 阅读 · 0 评论 -
FZU 2219【贪心】
思路:因为工人造完一个房子就死了,所以如果m最优的方案应该是耗时长的房子应该尽快建,而且最优的是越多的房子在建越好,也就是如果当前人数不到n,只派一个人去分裂。解决方案是从还需要新的n-m个人入手,一个“旧人”先分裂的两个“新人”,再去建造花费最小的两个房子,时间是max(t[i],t[j])+k;类似哈夫曼树的合并。利用优先队列解决。外送一题:51nod1117#in原创 2017-03-01 16:30:06 · 418 阅读 · 0 评论 -
CodeForces754D【贪心】
题意:有n个区间,每个区间覆盖区间里一段数,求最大连续区间长度被覆盖k次,并输出选取的区间。 思路:贪心;感觉一开始肯定是要把区间按left从小到大排序的。然后肯定是连续k个区间能够达到的重叠最长?因为left已经足够小了?3 21 10030 7031 78这个案例就说明这样贪心还不是准确的。 其实不管k多大,只有一个left,一个right,le原创 2017-02-15 12:24:37 · 371 阅读 · 0 评论 -
Codeforces Round #401 (Div. 2)【A,B,C,D】
最近状态极差。。水题不想写,难题咬不动。。哎,CF的题那么简单,还搞崩了= =、真是巨菜无比。Codeforces777A题意:略。思路:构造出3!次变换,然后输出就好。Code:#include using namespace std;int a[6][4]={{1,2,3},{2,1,3},{2,3,1},{3,2,1},{3,1,2},{1,3,2}};i原创 2017-02-24 21:49:28 · 105 阅读 · 0 评论 -
51nod1117【贪心】
yep.原创 2017-02-25 17:00:36 · 506 阅读 · 0 评论 -
CodeForces 137C【贪心+优先队列】
这种区间的贪心好像都出“烂”了?不过还是想写一下。。。先按照区间左端点排序一下,然后搞个优先队列维护当前最小的右端点。#include using namespace std;typedef long long LL;const int N=1e5+10; struct asd{ int x,y;}q[N];bool cmp(asd a, asd b){ if(a原创 2017-03-23 00:09:11 · 574 阅读 · 0 评论 -
51nod 1672【贪心+优先队列】
嘿嘿原创 2017-03-31 14:20:33 · 620 阅读 · 0 评论 -
Codeforces140C
题意: 给你 n 个数,问你最多能从里面取几组3个不同的数。思路: 把数组元素计数,然后每次拿个数最多的3个数组合,用优 先队列每次取大即可。 但是 1这里采用离 散化。就是先把数组元素排序,然后原来位置的元素用其排 序好的位置代表。#includeusing namespace std;typedef long long LL;const int N=1原创 2017-04-15 09:36:54 · 513 阅读 · 0 评论 -
ZOJ3963 【gay gay 的贪心】
(这个题的idea好棒啊)思路:一个值 val 的插入最好就是在一个最接近他的值的结点x (权值x so,拿个 set 维护一下所有的结点,每次二分找一下。还有要维护结点所能插的位置数量,不能插了要删除。PS: set.upper_bound()好像是log(N)的//#include #include#include#include#include#in原创 2017-04-25 19:50:18 · 1628 阅读 · 0 评论 -
Codeforces584E【贪心】
挣扎了好久! 逆序数好6啊! 直接把s数组映射成1,2,3,4,5,6 然后从1开始强势贪,如果小于其位置的数就往前找一个值大于等于该位置的位置,然后这一步肯定是必然的(互优的),然后就写完了。复杂度n^2,然后51nod1574显得更加强势,当然少了输出路径也就变成了一些每个数都在走必然最优的步,答案也就是他们要走的区间和/2。 = =mmp挫代码还搞了个p代表位置(想挫了也就写挫了,不过原创 2017-09-06 21:57:49 · 505 阅读 · 0 评论 -
Codeforces830A【二分+贪心】
二分其实很好考虑对吧,时间越多,满足的越多,如何judge呢,这个仔细想想还是挺有意思的. 1.左边的人拿左边的钥匙能在这个时间段满足,那就满足,对于整体方案来说是最优的 2.如果左边的对于某把钥匙不满足,之后出现了某个位置钥匙满足,那么之前那把钥匙一定是在这个人的左边,那么进而证明右边的人也一定不会用到这把不满足的钥匙.//#pragma comment(linker, "/STACK:10原创 2017-10-19 16:00:02 · 429 阅读 · 0 评论 -
CodeForces599C【贪心】
题意:给你一个序列,要求你从小到大排序,你可以划分成一个块一个块地进行块内排序,问你最多能分成几个块思路:贪心,首先感觉就是有正序的话我就分开啊;难道倒序不能分块?321肯定不行啊。存不存在连续两个倒序,但是后面有元素比前面块小,存在:[6 3] [5 1]这样分成两块是错的。所以首先是1,然后是2,然后是3,你可以标记啊,这个块有那么多元素,就是一段区间比如第一个原创 2017-02-10 09:29:08 · 428 阅读 · 0 评论 -
AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了。。。然后想想做完算了。。没想到C卡了一下,然后还是做出来了。D的话瞎想了一下,然后感觉也没问题。假装allkill.2333AtCoder Beginner Contest 052 A题意:输出大的面积?思路:max(A*B,C*D);AtCoder Beginner Contest 052 B题意:枚举过程原创 2017-02-27 21:23:52 · 639 阅读 · 0 评论 -
POJ1017 【据说是贪心...】
题意: 有6种面积的格子,给出这些格子的数量,然后有6*6的格子去容纳这6种面基,问最少需要几个6*6格子,使得所有类型的小格子被容纳。 思路: 按照面积的从大到小放。 一开始还是太天真,还要用各种1去补,wa了一发…具体都在代码那里注释了 贴一发瞎写的挫code……….#include <iostream>#include <cstdio>#include<vector>#incl原创 2016-08-08 11:07:28 · 1019 阅读 · 0 评论 -
51nod1432【贪心】
对于每个数我找一个和他相加最接近独木舟,然后ans+=1;想复杂了,直接两端来就好了。 然后两个相加如果<=m那么就让它们在一起,不是的话就让大的一艘船,然后继续搞(贪心)#include <bits/stdc++.h>using namespace std;typedef long long LL;const int INF=-0x3f3f3f3f;const int N=1e4+10;in原创 2016-09-09 20:43:23 · 347 阅读 · 0 评论 -
poj3617【贪心】
题意:给定长度为N的字符串S,要构造一个长度为N的字符串T串。 从S的头部删除一个字符,加到T的尾部 从S的尾部删除一个字符,加到T的尾部 目标是构造字典序尽可能小的字符串。思路: 贪心,每次取小,如果有相同,就往里面搜一下,)注意……输出…….pe…… code…..#include <iostream>#include <cstdio>#include <cstring>#inc原创 2016-08-08 19:05:10 · 423 阅读 · 0 评论 -
poj3069【贪心,水】
妈蛋,题意看错…看了挑战时被标记的点还是给出的点,瞎搞了半个多小时。。。 = =都想气的扔进水题系列了#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int Mod=1e9;const int原创 2016-08-08 22:37:31 · 364 阅读 · 0 评论 -
Codeforces712C【贪心】
看了这篇。。 http://blog.youkuaiyun.com/queuelovestack/article/details/52503162 直接就是从小到大,那么每次按最大的递增顺序上去,就是了。 因为每次只能取那么大,符合三角形三边关系,也不会避免每次拿小了。#include <bits/stdc++.h>using namespace std;typedef __int64 LL;con原创 2016-09-14 09:24:31 · 419 阅读 · 0 评论 -
51nod1163【贪心】
思路: 我们可以说: ①:价值大的不管时间早晚,都可以取,时间较晚的,本身就可以取,那么肯定是大的在前面取,但是在最前面那也是不对的,那么条件就是在规定的时间内,大的就是取了,因为他大,OK。 ②:只要时间允许,怎么取都无所谓,时间不允许取所有,挑大的,如果时间上满足就加了,不满足的话我们要挑个比他小的而且时间还要在他前面。 所以贪心策略就是先按照时间排下序,然后按照上面的想法操作。#inc原创 2016-09-02 17:06:37 · 126 阅读 · 0 评论 -
51nod 1133【贪心】
思路: 按照终点升序,然后遍历一下就好了;#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N=1e5+10;struct asd{ int x,y;};asd q[N];bool cmp(asd a,asd b){ if(a.y<b.y) return 1原创 2016-09-07 19:48:15 · 513 阅读 · 0 评论 -
51nod 1428【贪心】
思路: 就是先排序,然后对每个取最小的结束时间。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N=1e4+10;struct asd{ int x,y;};asd q[N];int n;bool cmp(asd a,asd b){ if(a.x<b.x) return原创 2016-09-08 09:14:52 · 497 阅读 · 0 评论 -
JAG Practice Contest for ACM-ICPC Asia Regional 2016 C题【贪心】
camp给出的题解:题解:贪心,先算出最小需要的长度。然后从左到右依次确定每一位。复杂度O(n)O(n)长度为 2n2n 的串可以构造出需要 [0,1+3+...+2n-1][0,1+3+...+2n−1] 中所有的数,所以长度是单调的。从左到右贪心着放的时候,右边的A的upper bound就是先放)再放(,这个的upper bound可以O(1)算出来其实代码:原创 2016-10-04 01:00:41 · 566 阅读 · 0 评论 -
51nod 1099【贪心】
思路:我们可以思考对于仅仅两个元素来说,A,B;先选A的话是会 A.b+B.a;先选B的话是会 B.b+A.a;所以哪个小哪个就放前面;#include #include #include #include #include #include #include using namespace std;typedef long long LL;const原创 2016-11-01 20:56:10 · 431 阅读 · 0 评论 -
Lightoj1156【二分+贪心】
题意:略。 思路: 以为我这个思路是大众思路原来不是。。。百度了一下什么最大流(膜拜熟练应用最大流选手) 二分很显然对吧,然后我就想二分完DP嘛,好像不行,感觉怎么搞都是你已经把答案搞出来的感觉,所以二分显得没有意义,想想贪心吧~ 然后突然一想,其实你想啊,走回来和走过去是一样的对吧,无非就是有些不能一起走。那么我们先在起始位置(0)放两个人,然后一起往前走,首先肯定是走到一个能走的最远无约原创 2017-11-21 17:32:58 · 408 阅读 · 1 评论