![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心
EMber _
人但有追求,世界亦会让路。
展开
-
bzoj2014
分析:感动~~好不容易遇见道水题。。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<queue>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace原创 2017-03-09 22:12:29 · 199 阅读 · 0 评论 -
jzoj4726. 【NOIP2016提高A组模拟8.22】种花 贪心+堆
这题思路很巧妙,要借鉴。 题意:给你一个环,选出M个点,任意两个互不相邻,要求总和最大。 一开始想的dp,设f[i][0/1]表示i选不选的最大总和,然后发现i的取值基本上能和他前面所有的值都有关联,由于是个环,所以dp你连预处理都会炸。。如果是个序列就可以这么做,不过在后面复制一遍然后用单调队列优化好像也可以,但那就太不优美了其实是我懒得打 那么我们可以贪心,把所有的数加入大根堆,每次取出最原创 2017-08-09 10:51:33 · 480 阅读 · 0 评论 -
bzoj1691 [Usaco2007 Dec]挑剔的美食家 treap+贪心
比较明显的贪心吧,按照鲜嫩值排个序,从大到小,然后每次只加入比当前鲜嫩值大的,直接查找就好了,找到以后就删掉。#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using names原创 2017-07-27 15:39:38 · 241 阅读 · 0 评论 -
#520. 「LibreOJ β Round #3」绯色 IOI(开端) 贪心
妈耶,没脸见人了。巨水,想出来不写,人生重来算了。 就是个找规律题,相邻一个连一下,但是我没注意到是IOI赛制,以为是OI赛制所以没打,感觉70分好打但是懒得了。。 证明就是把相邻3个列一下式子就出来了,我怎么tm就这么懒呢。 证明和题解懒得写,贴。 https://loj.ac/article/129#include<cstdio>#include<cstring>#include<a原创 2017-08-04 22:31:55 · 586 阅读 · 0 评论 -
bzoj4596&&JZOJ5271&&5043保持平衡 贪心+堆(经典思想)
博爱路上种起了一棵棵的大树,但是有一些地方的树超过了负荷,有一些地方的树的数量又不够。我们不妨把博爱路看做一条数轴,数轴有n个点,从1到n编号,第i个位置原来现在有ai棵树,这个位置的需求是bi棵树。ai,bi都是0到10的整数。由于你需要是这个位置的树的数量保持平衡,所以你需要移除或者搬一些树过来。我们怎么使树的数量平衡呢?首先,你可以从某个位置i移动一棵树到位置j,这时,你需要的运费是|i原创 2017-08-14 16:59:49 · 372 阅读 · 0 评论 -
bzoj2796 [Poi2012]Fibonacci Representation 贪心
题意:给一个数<=4e17,求最少用多少个fibonacci数凑成。 被上一道题祸害,一直想dp,苦想无果,最多也就是O(n). 设f[i]表示表示i用多少个,O(n)扫一遍。 问题是这题n巨大,然后想了半天没办法了,随手一个贪心居然tm过了wtf。。。 每次取左右最大的。 无法证明QAQ,有谁会证的求教。找不出反例= =#include<cstdio>#include<algorith原创 2017-09-05 12:50:54 · 288 阅读 · 0 评论 -
JZOJ5372. 【NOIP2017提高A组模拟9.17】猫 链表+贪心+堆优化
题意:一个长度为n的环,每个点有贡献,取了一个就不能取他的相邻,问取1-n/2个的最优方案是多少。 DP可能会挂,我自己试了试好像会出点问题= =毕竟是环,如果类似这种问题,不能拆环一般就不要DP。 于是考虑贪心,大根堆优化。其实这题可以算是堆优化贪心的典型例题了,每次取完堆顶以后把这个点的贡献改为这个点相邻的两个点的贡献-这个点的贡献,然后把相邻两个删掉,相当于再次取到这个点时就是撤销,就是把原创 2017-09-18 18:10:42 · 525 阅读 · 0 评论 -
bzoj4567[Scoi2016]背单词 贪心+trie
这题的题意让我一直有放弃这题的念头。。。。。 大概就是说,加入一个单词,必须要先加入他的后缀,代价为最近加入的后缀和当前加入的下标差。 由于要加入后缀,用trie做就好了。 先把所有串加入进去,然后每个点和最近的后缀结束点连边,相邻的结束点之间连边,预处理出size,然后对于当前能加入的字串,选择一个size最小的加入,证明显然。#include<cstdio>#include<algori原创 2017-10-01 15:52:16 · 285 阅读 · 0 评论 -
51nod 最大M子段和 V1,V2,V3 dp 贪心 heap(bzoj2288)
题意:给一个长度为n的序列,要求选出m个不相交的部分,要求总和最大,如果m>= n个数中正数的个数,那么输出所有正数的和。。 V1:n,m<=5000. V2:n,m<=50000. V3:n,m<=500000.V1: 一个简单的DP。 明显有f[i][j]表示做到第i个,选择了j段。 那么可以推导: 新开一段f[i][j]=f[i−1][j−1]+a[i]f[i][j]=f[i-1原创 2017-10-17 17:25:34 · 390 阅读 · 0 评论 -
bzoj1555KD之死 贪心+堆
题意:有一些箱子,有承重和重量,最底下有一个车,有承重限制。 要求最多能放多少个箱子。不能说水,也不能说难的一道题。。 首先肯定知道如果bt-aw>at-bw那么a肯定要在b上面更加优秀,那么按照这个排序以后来贪心做。 如果当前盒子必须要放,那么如果放上去以后超重了,那么把最重的盒子拿出来扔掉再把当前盒子加入。如果堆中没有盒子了则无解。 如果当前盒子不必须要放,那么能放就放,如果这个盒子不能原创 2017-10-29 10:21:33 · 410 阅读 · 0 评论 -
bzoj3721PA2014 Final Bazarek 贪心
题意:有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价。思路巧妙的贪心,由于判断一开始写错了导致没有1A。 每次直接选取最大的k个,然后如果是偶数的话就把k个中最小的偶数替换成后面最大的奇数或者把k个中最小的奇数换成后面最大的偶数,因为只有奇数才能改变奇偶性,所以正确性显然。#include<cstdio>#include<algorithm>#include<cstring原创 2017-11-03 14:20:07 · 251 阅读 · 0 评论 -
jzoj5241【GDOI2018模拟8.8】苹果和雪梨 贪心
Description作为新开的水果连锁店店员,你需要把总部发给你的苹果和雪梨分组出售,从而获得最 大利润。 总部发给你的水果包括: n 个苹果,质量分别为a1,a2…an n 个雪梨,质量分别为b1,b2…bn。 你卖的是盒装水果,一盒水果包括一个苹果和一个雪梨,苹果的质量乘上雪梨的质量就 是这盒水果的价钱。把苹果雪梨配对分成总共n 盒水果后,你要把价格最高的一盒返还给 水果店总部,原创 2017-08-09 09:15:23 · 437 阅读 · 0 评论 -
bzoj4922 Karp-de-Chant Number 动态规划+贪心
题意:给你n个括号序列,让你尽量选出多的括号序列,使得最终的总序列加起来刚好为一个合法序列。套路大集合 算出每个括号序列的前缀和,然后就是bzoj3709: y>x的和y#include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdlib> #include<cst原创 2017-07-10 07:53:34 · 625 阅读 · 0 评论 -
bzoj1117[POI2009]救火站Gas 贪心
这是以前的经典题目的难化版本。。 一开始以为要dp,列了很多方程感觉都不合适= =结果发现是贪心QAQ。 我们对于每个点维护两个东西。 以x为根的子树中距离这个点为i的点需要被覆盖多少个 以x为根的子树中距离这个点为i的点还能被覆盖多少个。转移显然。 那么一种很明显的贪心策略就是能放就放。。如果需要的>能覆盖的明显就需要放一些在这个点上。 问题是怎么抵消两个量呢。 我们知道当我们用一个原创 2017-07-11 20:12:21 · 632 阅读 · 0 评论 -
bzoj3411
分析:直接随便贪心,本来一开始想的二分之后直接扫一遍,结果发现l<=10^9。。那就直接随便贪心一波就好了。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i原创 2017-03-20 21:15:02 · 290 阅读 · 0 评论 -
bzoj4781[Usaco2017 Open]Paired Up
怎么感觉silver越来越水了(大雾)。我记得以前没这么水啊。 分析:一开始一看最大最小值秒二分,发现判断复杂到家了,想了想发现排个序xjb做就能过。。#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<iostream>#define fo(i,a,b) for(int i=a;i<=b原创 2017-03-31 10:00:55 · 469 阅读 · 0 评论 -
bzoj1828: [Usaco2010 Mar]balloc 农场分配 线段树+贪心
。。其实是区间覆盖的加强版。。 区间覆盖基本上都是右端点排序以后贪心做,这题看了一下好像也是这样。。 直接排序以后线段树上就可以了,好像不用延迟标记会wa。。不知道为啥。。#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#define fo(i,a,b) for(int i=a;i<=b;i++)原创 2017-05-13 10:36:45 · 402 阅读 · 0 评论 -
bzoj1785 [Usaco2010 Jan]telephone
明显的贪心。。先跑树内,树内不行匹配树外。。#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)#define inf 0x3f3f3f3f3f3原创 2017-05-13 16:03:49 · 264 阅读 · 0 评论 -
bzoj1110 [POI2007]砝码Odw 贪心+进制拆分
题意就不说了。一开始居然在想直接dp,,, 看到是整数倍我的内心居然毫无波动。。真是傻的不行了。。 因为是整数倍,那我们可以把一个容器用砝码的重量做为进制拆分,然后从小到大一个个填就可以了,贪心策略肯定是最优的。 具体如何拆分看hzwer www:http://hzwer.com/4761.html#include<cstdio>#include<algorithm>#include<io原创 2017-05-09 15:57:39 · 354 阅读 · 0 评论 -
bzoj1596 [Usaco2008 Jan]电话网络
最近刷题速度贼慢要提速了。 题意:每一个点可以标记,和这个点相邻的点都会被标记,问最少多少个标记可以标记完全图。 好经典的模型啊,我记得可以dp做,然而我选择了二分,结果后来我发现判断其实就是一个贪心,直接上就好了。。 从下往上能标记就标记。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#de原创 2017-05-19 21:39:46 · 251 阅读 · 0 评论 -
bzoj1577 [Usaco2009 Feb]庙会捷运Fair Shuttle 贪心+线段树
题意比较明显就不说了。 其实贪心很明显,我一开始还以为要dp(把序列变成一个图就要dp了 以后可以出毒瘤题目祸害世界) 然后一开始是想用STL硬上的,但是不熟悉所以打挂了,然后看网上有线段树打法,思路很明显但是想了半天才知道线段树干什么用的。。 具体来说就是每次能往车上塞,就塞,不然就跳。#include<cstdio>#include<cstring>#include<algorithm原创 2017-05-20 16:18:38 · 550 阅读 · 0 评论 -
bzoj1749 [usaco2005 open]Landscaping 地形改造
这题很强势,写了半天炸了,判断山顶一直很懵逼,知道问了Claris才知道原来就是按照题目那样子暴力就好了= =。 找出所有山峰,然后贪心减去代价最小的= =#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i原创 2017-06-06 21:26:20 · 539 阅读 · 0 评论 -
bzoj1692 [Usaco2007 Dec]队列变换 后缀数组+贪心
比较简单的后缀数组应用题。。 首先肯定是贪心选,不同的自不用说,相同的看他后面的字串是否更优秀,这就用到了rank的作用,看两个字串的rank哪一个更小哪一个更优。 求rank的时候直接把字符串加个区分符然后倒过来黏贴一遍,然后直接做就好了。 一般来说后缀数组的题目,一开始要想怎么操作,然后用SA去优化,而不是老是想着用SA怎么做,这样子很容易失了智,啥都想不到 = =#include<cst原创 2017-06-07 02:12:07 · 351 阅读 · 0 评论 -
bzoj1727 [Usaco2006 Open]The Milk Queue 挤奶队列 贪心
一开始其实想法没错,当时后来就想歪了= =,总时间最小肯定每个人的等待时间是最小的= =,这个没错,然后我就在想如何求每个人的最小等待时间,好像dp不可做啊。。 啊然后只能看贪心咯。。不过贪心策略还是很明显的。 max(A1+B1+B2, A1+A2+B2)<=max(A2+B2+B1, A2+A1+B1) 化简: max(A2, B1)+A1+B2<=max(A1, B2)+A2+B1原创 2017-06-04 16:44:39 · 417 阅读 · 0 评论 -
bzoj1747[Usaco2005 open]Expedition 探险 优先队列+贪心
这题的话,贪心策略挺明显的,就是不能跑了直接把以前没加过油的最大加油站加油就可以了。 然后一开始直接记录最大值发现错了,想了想发现如果我这个最大值用过了下一次的最大值可能在这之前也可能在这之后,所以必须要维护一个大根堆。。 优先队列完美解决啦。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#incl原创 2017-06-09 00:41:44 · 708 阅读 · 0 评论 -
bzoj2109 [Noi2010]Plane 航空管制 贪心 拓补排序
题意:定义一个航班的起 飞序号为该航班在起飞序列中的位置,即是第几个起飞的航班。 起飞序列还存在两类限制条件: 第一类(最晚起飞时间限制):编号为 i的航班起飞序号不得超过 ki; 第二类(相对起飞顺序限制):存在一些相对起飞顺序限制(a, b),表示 航班 a的起飞时间必须早于航班 b。求每个飞机在可行的起飞序列中最小的那个数。拓补很显然,但是直接连边比较难以处理第二种限制,于是我们显然想原创 2017-11-06 17:21:05 · 362 阅读 · 0 评论