
其它-贪心
Endless_Way
这个作者很懒,什么都没留下…
展开
-
BZOJ 1029 [JSOI2007]建筑抢修
贪心,根据t2从小到大排序,用堆维护。·剩余时间足够完成当前任务,则插入当前任务 ·剩余时间不足完成当前任务,若当前任务的t1比堆中t1的最大值大,则不插入,否则插入#include<cstdio>#include<algorithm>#define MAXN 150010struct pro{int t1, t2;}p[MAXN];using namespace std;bool cm原创 2016-08-01 13:37:11 · 293 阅读 · 0 评论 -
AtCoder agc007_f Shik and Copying String
贪心+队列画出折线图,每一列表示一个位置,每一行表示一次copy,折线段表示覆盖。一个过程就相当于从第一行开始不断向下画折线来覆盖最后一行。根据贪心,显然折线应贴着上面来画,且转移一定是从最近的转移过来。瞎JB感受一下就会发现折线每次至多增加一格,因此只要维护这些折线的拐点,也就是差分点就可以了,用一个队列维护即可。以上口胡,目测讲不清楚。详情还是去看题解吧。#include<cstdio>#in原创 2017-04-27 23:37:19 · 714 阅读 · 1 评论 -
BZOJ 4240 有趣的家庭菜园
树状数组+贪心感觉最近写博客有一点高产。。。考虑从小到大放。最小的要么放最左,要么放最右。由于它放左还是右不会影响中间元素的操作次数,所以直接贪心。以此类推。#include<cstring>#include<cstdio>#include<algorithm>#define N 300005#define lowbit(_i) (_i&-_i)using namespace std;n原创 2017-02-02 18:00:01 · 427 阅读 · 0 评论 -
CF 251D Two Sets
贪心+高斯消元显然从高到低按位考虑。如果这一位有奇数个1,那么这一位最终对答案的贡献肯定是1。如果有偶数个1,对答案的贡献可能是0或2。要最大化答案,因此我们需要更多的2。列出方程,系数ai,ja_{i,j}表示第j个数的第i位的值。变量xix_i表示第i个数是否归自己。要出现尽量多的2,只需让自己这边这一位的异或和为1即可。即a1x1^a2x2^…^anxn=1。判断如果无解说明不能做到,去掉该方原创 2017-01-28 16:51:10 · 621 阅读 · 0 评论 -
BZOJ 4560 [JLoi2016]字符串覆盖
贪心+KMP一副区间DP的样子,然而并不是如果只有两个串,那我们可以枚举它们的先后顺序。对于maxans则让前一个串在尽量前的位置匹配,后一个串在尽量后的位置匹配。对于minans则枚举前一个串匹配的位置,把后一个串放在第一个串开头后面第一个匹配位置。推广下去就有了四个串的做法。枚举顺序,对于maxans,第i+1个串的开头要么在第i个串结尾后的第一个匹配位置,要么在第i个串内部的最后一个匹配位置。原创 2017-02-14 08:11:31 · 1479 阅读 · 1 评论 -
UOJ 110 [APIO2015]Bali Sculptures
贪心+二进制按位DP我们需要让答案尽量小,即让答案的二进制位的高位尽量为0。可以一位一位做,同时要保证前面做过的位的答案不变。前4个子任务,记f[i][j]表示前i个数分成j组,且符合当前答案的方案是否存在。那么它可以从一个合法的f[k][j-1] (k < i) 转移过来。这样是O(n^3*logn)的。第5个子任务用上面的方法会T。考虑到A=1,即没有分组下界。记g[i]表示前i个数符合当前答案原创 2016-10-05 15:09:06 · 372 阅读 · 0 评论 -
UOJ 2 [NOI2014]起床困难综合症
贪心我们的目标一定是让最终答案的二进制位的高位尽量为1 发现位运算只会影响一位 于是搞贪心#include<cstdio>#define N 100005using namespace std;struct door{ int op, t; int make(int x) { if(op==1)return x|t; if(op==原创 2016-10-05 13:09:18 · 354 阅读 · 0 评论 -
BZOJ 2115: [Wc2011] Xor
贪心求线性基+找环挂题解:http://www.cnblogs.com/BLADEVIL/p/3484486.html任何复杂环一定能由简单环异或得到任何一条1~n的路径的异或值都可以通过其他的1~n的路径异或一些环得到然后求出所有环,搞出线性基,贪心一下即可简单环的个数一定是m-n+1#include<cstdio>#include<algorithm>#define N 50005#def原创 2016-10-15 11:09:33 · 336 阅读 · 0 评论 -
UOJ 82 [UR #7]水题生成器
贪心发现n!的约数也就几万个,然后就可以贪心,每次找最大的减,一定能减完。证明:我不会官方题解:http://vfleaking.blog.uoj.ac/blog/219#include<cstdio>#include<algorithm>#define ll long longusing namespace std;int prime[9]={0,2,3,5,7,11,13,17,19},原创 2016-10-23 12:23:00 · 400 阅读 · 0 评论 -
UOJ 244 短路
贪心好惨啊,这题考场上打的是正解,但是把INF设太小了,直接爆零。改完INF就A了。。。题解:http://matthew99.blog.uoj.ac/blog/2085#include<cstdio>#define N 100005#define ll long longusing namespace std;ll pre[N], f[N], sum[N], a[N];int main(原创 2016-10-22 09:39:16 · 399 阅读 · 0 评论 -
BZOJ 1050 [HAOI2006]旅行comf
排序+贪心按边权排序,枚举权值最小边,贪心地从小到大选取比最小边大的边,用并查集维护连通性#include<cstdio>#include<algorithm>#define M 5005#define N 505using namespace std;struct edge{int a,b,v;}e[M];const int INF=30005;int fa[N];bool cmp原创 2016-09-25 13:35:23 · 355 阅读 · 0 评论 -
BZOJ 1724 [Usaco2006 Nov]Fence Repair 切割木板
合并果子裸题每次选取最小的两个合并即可证明:把合并过程画成哈夫曼树,如果最小点的兄弟不是次小点,把次小点和最小点的兄弟换一个位置答案肯定不会更劣。也就是记次小点i,最小点的兄弟j,点到根的距离为d,点权为w 由 w[i]<w[j],d[i]<d[j]w[i]<w[j],d[i]<d[j] 一定有 d[j]∗w[j]+d[i]∗w[i]>d[j]∗w[i]+d[i]∗w[j]d[j] * w[原创 2016-09-25 12:42:48 · 413 阅读 · 0 评论 -
LOJ 6043 「雅礼集训 2017 Day7」蛐蛐国的修墙方案
搜索+贪心因为要有解,所以把给出的置换连边形成的图一定是若干简单偶环。然后想了半天贪心,发现什么策略都找不到……考虑爆搜,直接搜索是O(2n2n)O(2^{n\over2}n)的,注意到如果环大小为2则一定前一个是左括号,因此只要枚举长度至少4的环,这样O(2n4n)O(2^{n\over4}n),就能过了。#include<cstdio>#include<cstdlib>#define N 1原创 2017-06-24 21:50:47 · 720 阅读 · 0 评论