贪心
文章平均质量分 67
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[贪心] BZOJ 3671 [Noi2014]随机数生成器
这题因为要求是字典序最小所以就可以贪心。一位位取看能不能取到。取的时候把取的这个数左下右上标记成不可取就行了。均摊复杂度O(NM) 类似筛法的复杂度#include#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;ty原创 2016-04-07 18:44:44 · 325 阅读 · 0 评论 -
[贪心 数学] 完全平方数最大
原贴:http://blog.csdn.net/cax1165/article/details/53052917从1 − N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少。对于n的阶乘质因数分解后如果一个素数次数是奇数那么不选这个素数 否则选这个素数 这样就能保证最大并且不会出现一个数的一部分选一部分不选的情况 因为不选原创 2016-11-14 18:38:10 · 578 阅读 · 0 评论 -
[贪心 DP] 51Nod 1241 特殊的排序
求出最大的连续子序列即可 然后不对的向两边怼#include#include#includeusing namespace std;const int N=50005;int n,a[N],pre[N],ans;int f[N];int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",a+i原创 2016-11-22 14:29:25 · 365 阅读 · 0 评论 -
[二分 贪心 || 树的划分] NOI2003 Day 2 Berry Test6~Test9
论文:鬲融--浅谈特殊穷举思想的应用论文:贝小辉--浅析树的划分问题并不会打树的划分算法#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf[100000原创 2016-12-09 14:02:28 · 318 阅读 · 0 评论 -
[贪心 归并排序] BZOJ 2920 [Poi1998]How to pack containers
对于容器从小到大考虑,首先将体积为i的方案与已有方案利用归排合并,然后若当前的方案不足T[i]个则无解,否则选取前T[i]个加两合并作为下一次的方案。#include#include#includeusing namespace std;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf原创 2016-12-17 11:26:41 · 474 阅读 · 0 评论 -
[贪心 构造] BZOJ 2943 [Poi2000]三臂起重机 Triple-Arm Crane
在BZOJ上蜜汁RE但是main上过了if p > q then swap(p,q)for I := 1 to n do if i没有放 then if i + p没有放 then 放(i,i+p,i+p+q) else 放(i,i+q,i+p+q)为什么这么做可行呢 可以证明对于每个循原创 2016-12-18 13:12:11 · 405 阅读 · 2 评论 -
[平面图 贪心 || 最大流] BZOJ 2939 [Poi2000]滑雪 Skiers
直接做最大流是可以的。不过可以发现,因为所有的路线不相交,故最左的路线尽量往左取显然是最优的。从左至右深搜此图即可得出答案。and the following k integers are their numbers, which are ordered according to the arrangement of glades leading to them, in eas原创 2016-12-18 13:06:45 · 656 阅读 · 0 评论 -
[贪心 图论] 计蒜客 40 百度之星 聚会游戏
百度之星总决赛即是一群编程大牛一决高下的赛场,也是圈内众多网友难得的联欢,在为期一周的聚会中,总少不了各种有趣的游戏。某年的总决赛聚会中,一个有趣的游戏是这样的:游戏由Robin主持,一共有N个人参加(包括主持人),Robin让每个人说出自己在现场认识的人数(如果A认识B,则默认B也认识A),在收到所有选手报出的数据后,他来判断是否有人说谎。Robin说,如果他能判断正确,希望每位选手都能原创 2016-11-17 06:56:39 · 463 阅读 · 0 评论 -
[贪心 枚举] BZOJ 3214 [Zjoi2013]丽洁体
A和C贪心一通 B只要乱枚举就好了那么复杂度 500n#include#include#include#include#include#include#includeusing namespace std;const int N=500005;char ss[4][N];map Map;int cnt=0;inline void Deal(char *原创 2017-01-18 21:09:17 · 864 阅读 · 0 评论 -
[DP || 贪心 链表] BZOJ 4576 [Usaco2016 Open]262144 & BZOJ 4580 [Usaco2016 Open]248
有意思的一道题官网上的做法是f[i][j]表示从j出发能够合并出i的末端 不存在则为0然后就可以转移了这有什么好呢 短#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=原创 2016-10-23 12:14:26 · 439 阅读 · 0 评论 -
[贪心 模拟 + 二分答案 DP] BZOJ 1181 [CROATIAN2009]IZBROI选举
听说这是种有理有据的席位分配方法? 求最大值 可以直接把剩下的票全给他 模拟一发就好了 求最小值 就需要二分答案加DP检验了 我们用fi,jf_{i,j}表示不包括当前党派的前ii个党派总共占据jj个席位最少还要多少选票 只要检验 f20,m−mid≤V−totf_{20,m-mid} \leq V-tot 就行了 2020是因为最多有2020个党派有席位 因为5%5\%的限制#inclu原创 2017-03-21 23:47:44 · 575 阅读 · 0 评论 -
[后缀数组 贪心] BZOJ 4278 [ONTAK2015]Tasowanie
两个指针 显然小的那个先放 如果一样 比后一个 再一样 再后 然后就转化成比较后缀的字典序了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p原创 2017-04-28 20:25:24 · 474 阅读 · 0 评论 -
[贪心 KMP] 2016 计蒜之道 初赛 第一场 A. 青云的服务器密钥
只有一种字母简单求和一下两种或者以上的字母我们就把某个字母安排在这,它同种类的其他字母安排到最后,那么前面不含这个字母的部分的π值都将为0,从开始出现这个字符,才有π值,且只能为1,这样答案就应该是这个字母出现次数cnt-1。#include#include#includeusing namespace std;const int N=1000原创 2016-11-09 10:42:42 · 447 阅读 · 0 评论 -
[高斯消元 线性基 贪心 拟阵] BZOJ 2460 [BeiJing2011]元素
基本同BZOJ3105#include#include#include#includeusing namespace std;typedef long long ll;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=原创 2016-07-06 17:33:04 · 920 阅读 · 0 评论 -
[高斯消元 线性基 贪心 拟阵] BZOJ 3105 [cqoi2013]新Nim游戏
第一次拿完后,要使剩下的火柴中不存在异或和为0的子集,且让子集和最大求线性无关子集算术和最大值证明是个拟阵 但我不会拟阵记结论吧...#include#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static原创 2016-07-06 17:30:13 · 563 阅读 · 0 评论 -
[高斯消元 线性基 贪心 拟阵 逆元] BZOJ 4004 [JLOI2015]装备购买
不是很懂拟阵那一套理论#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000原创 2016-07-06 17:37:54 · 421 阅读 · 0 评论 -
[杂题 贪心] BZOJ 2138 stone
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,1原创 2017-06-22 20:31:43 · 614 阅读 · 0 评论 -
[贪心 置换] 51Nod 1125 交换机器的最小代价
先找置换 肯定会形成循环如果问最小交换次数 就是n-循环数这里问最小代价先分成很多组置换,因为是两两交换,所以在每组置换内部,让最小的数反向走一圈,也就是 最小数交换 置换长度-1 次,其他数交换一次.还有一种可能,是引入置换外部的最小数,也就是先交换内部最小数和外部最小数,再按第一种方法搞,最后再换回来.#include#include#include原创 2016-11-17 07:57:58 · 608 阅读 · 0 评论 -
[贪心 堆 链表] BZOJ 3502 PA2012 Tanie linie & 51Nod 1052 最大M子段和
做法同2280 1150多年前的代码丑#include#include#include#includeusing namespace std;typedef long long ll; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf原创 2016-05-02 13:53:44 · 587 阅读 · 0 评论 -
[贪心 排序] 计蒜客 231 零花钱
作為创造產奶纪录的回报,Farmer John决定开始每个星期给Bessie一点零花钱。FJ有一些硬币,一共有N (1 比较贪心的策略 不能花太多冤枉钱每天 我们先从大往小填 一直卡着不超出 然后用小的填到超出一点点就行了#include#include#includeusing namespace std;typedef pair abcd;原创 2016-11-17 07:04:18 · 956 阅读 · 0 评论 -
[贪心] BZOJ 2697 特技飞行
贪心地,每次把最大的放在两端#include#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,原创 2016-05-02 13:28:02 · 311 阅读 · 0 评论 -
[贪心] BZOJ 2811 [Apio2012]Guard
好恶心的贪心大概就是先把不可能有的去掉然后把区间合并 有包含的大区间去掉如果只剩K个空 输出 结束剩下区间扫一遍 如果一个区间内只剩一个空 删掉这个空 加入答案然后对于每个位置 如果让它不放 覆盖剩余区间所需的个数如果大于K 这个空必选*对于覆盖前t个区间至少要几个可以用DP#include#include#includeusing namespace s原创 2016-05-04 13:37:42 · 562 阅读 · 0 评论 -
[贪心 DP] BZOJ 4069 [Apio2015]巴厘岛的雕塑
从高位到低位题目里面数据分两类一类是A>1,dp一下f[i][j]这段区间是否符合当前答案,n3log;第二类是A=1,dp一下g[i]表示在满足答案前提下以i为结尾切开来最少能且多少段,n2log。#include#include#includeusing namespace std;typedef long long ll;inline char nc(原创 2016-05-04 21:22:50 · 568 阅读 · 0 评论 -
[进制 贪心] BZOJ 1110 [POI2007]砝码Odw
因为都是倍数,可以考虑以最小的数为进制然后从小到大装,不够的向高位借,类似小学减法,但感觉可卡?#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(b原创 2016-04-23 09:59:37 · 420 阅读 · 0 评论 -
[贪心 二次函数] BZOJ 2667 [cqoi2012]模拟工厂
跪Po姐状压枚举每次Check的时候,对于每段时间显然先提高生产力再生产产品 那么我可以考虑这一段内先尽量提高生产力 但是这样可能会导致生产力提高得太高而没有足够的时间生产产品使得某个订单失败 因此我们计算出对于后面的每一个订单,最多花多少时间提高生产力可以满足如果用接下来的时间都生产的话不至于fail 由于产品数量是关于提高生产力次数的二次函数 因此解个方程就行了原创 2016-06-19 21:19:26 · 680 阅读 · 0 评论 -
[三分 贪心] BZOJ 3874 [Ahoi2014]宅男计划
三分答案然后贪心单峰的话,可以发现,如果我们外卖的次数过少,那么就会出现一些食品性价比不高的情况;如果次数过多,那么就会浪费外卖运费。#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p原创 2016-04-21 13:35:26 · 638 阅读 · 0 评论 -
[二分答案 贪心] BZOJ 3248 [ioi2013]robots
考虑二分答案,这样只需检验m分钟内是否可以把所有玩具收拾好。将每个玩具i与坐标(W[i]:重量, S[i]:体积)对应,这样每个弱机器人可以收拾某一横坐标以左的玩具,每个小机器人可以收拾某一纵坐标以下的玩具。从右至左添加这些玩具,一旦某一时刻某个弱机器人可以收拾当前玩具,则它可以收拾之后的所有玩具。因此我们应尽量保留弱机器人,即优先使用小机器人。选择小机器人时,当然应该优先选择可以收拾原创 2016-07-05 18:43:03 · 903 阅读 · 0 评论 -
[贪心] BZOJ 3410 [Usaco2009 Dec]Selfish Grazing 自私的食草者
题目大意:取尽量多的区间 两两交为空按照右端点排序然后贪心。因为右端点小显然接下来可以取更多的区间#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+frea原创 2016-07-21 08:41:41 · 455 阅读 · 0 评论 -
[二分图匹配 贪心] BZOJ 4276 [ONTAK2015]Bajtman i Okrągły Robin && BZOJ 2034 [2009国家集训队]最大收益
%%%dyh按强盗从大到小排序,贪心选取每个强盗能不能抓。判断一些强盗能不能抓完,可以按左端点排序,使用优先队列维护右端点。贪心算法的正确性: 考虑匈牙利算法,从大到小一个一个匹配,一个点一旦在匹配中,那么一直在匹配里面。也可以直接用拟阵证明 但我不会堆的复杂度是n2logn 有线性的判断方法我们从小到大扫描所有的位置,如果这个位置没有分配任务,那么原创 2016-08-05 14:47:42 · 819 阅读 · 0 评论 -
[树形DP || 贪心] BZOJ 1907 树的路径覆盖
DP#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,10原创 2016-08-23 18:26:25 · 433 阅读 · 0 评论 -
[DP 贪心] 51Nod 1673 树有几多愁
如果我们确定了每个叶子之间的相对大小关系,就可以用贪心来解决这个问题了。对于每一个祖先,它的编号一定大于它的所有儿子。我们从大到小来枚举所有编号(这里指相对大小)。令dp[i]表示i这个状态的节点可以得到的最大乘积。有dp[i]可以转移到dp[i+j],其中j这个状态仅有一个节点,并且那个节点的权值是可以算出来的。令f[i]表示i这个状态的节点全部向根染色后最终会有多少点被染色原创 2016-09-25 16:45:23 · 557 阅读 · 0 评论 -
[贪心 二分] 2016 计蒜之道 复赛 B. 联想专卖店大促销
注意相邻不能相同 意味着最大的不超过其余两个的和+1可以发现 三个礼包的交集是1个a 1个b 剩余分别对应1个a 1个b 1个c那么我们二分 是否x+y+z>=mid然后验证#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=bu原创 2016-11-09 10:33:18 · 383 阅读 · 0 评论 -
[贪心] Codeforces 723C #375 (Div. 2) C. Polycarp at the Radio
乱贪心一通#include#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2){ p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) retu原创 2016-10-05 21:09:43 · 315 阅读 · 0 评论 -
[DP 决策单调性 || 贪心] UER #7 A.短路
先是写了个决策单调性DP然后知道能贪心 就没写了#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(bu原创 2016-10-31 17:53:09 · 347 阅读 · 0 评论 -
[堆 贪心] Canada Cup 2016 D. Contest Balloons
不想多说#include#include#include#includeusing namespace std;typedef long long ll;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fr原创 2016-10-31 17:58:48 · 302 阅读 · 0 评论 -
[贪心 入门题] 洛谷 P2651 添加括号III
尽然看一道入门题看了这么久...可以想见除了第一个数在上面 第二个数固定在下面 其他数可以任意那么就只留第二个数在下面#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;原创 2016-11-14 19:06:56 · 432 阅读 · 0 评论 -
[贪心 排序] 计蒜客 218 配对元素
给出2个序列A={a[1],a[2],…,a[n]},B={b[1],b[2],…,b[n]},从A、B中各选出n个元素进行一一配对(可以不按照原来在序列中的顺序),并使得所有配对元素差的绝对值之和最大。就是正着排序 反着排序 不过我不会证明#include#include#includeusing namespace std;const int N=10005;i原创 2016-11-17 07:00:57 · 530 阅读 · 0 评论 -
[贪心 构造] SRM 717 div1 ScoresSequence
首先他保证图唯一确定,那么可以把图给构出来 类似这个题,按照出度从大到小排序,出度最大那个点怎么分配,类似无向图可图判定,应该是向出度小的点连,使得出度大的向他连,让出度大的出度减小// BEGIN CUT HERE #include<conio.h>#include<sstream>// END CUT HERE #include<cstdio>#include<cstdlib>原创 2017-07-05 19:11:09 · 378 阅读 · 0 评论