贪心题做题记录
1|0贪心
贪心题合集,感觉不少都是结论题。 好吧其实不多
1|1CF725F Family Photos
题意:有
思路:对
如果
1.
2.
3.
如果
这样一来,我们只用考虑唯一一种情况。为了统一加上
trick:对于两个人轮流取,可以想办法把两个人的贡献统一,然后排序后间隔取。
1|2CF1601D Difficult Mountain
题意:有
思路:考虑对
假设
假设
复杂度
trick:通过分讨求出两个元素之间的大小关系,然后就可以排序选取了。
1|3CF875F Royal Questions
题意:有
思路:考虑建边,边
trick:对于选择最大的匹配,可以建图,转成在树或者基环树让边选择对应的点,然后贪心处理。
1|4P6631 [ZJOI2020] 序列
题意:有长为
思路:把
接着考虑第 2、3 个数。此时唯一的区别是可能有前面的线覆盖,因为如果能延用之前的线那么一定不劣。设前面的直线有
一直按这样推下去即可。
trick:递推顺次贪心。
1|5P4577 [FJOI2018] 领导集团问题
题意:求树上LDS。
思路:可以类比序列上的LDS,每次找到第一个比
trick:类比传统模型,尝试套用一样的方法。
1|6CF526G Spiders Evil Plan
题意:有一棵树,有边权,多次询问,每次给出
思路:首先有结论,用
在一棵树中,因为已经钦定了根节点被选,那么我们就是要再选
现在唯一的问题是如果
trick:树上的贪心通常可以往长链、直径方面想。
1|7P6831 [IOI2020]嘉年华奖券
题意:有
思路:首先考虑,假如我们知道了我们总共用了哪些奖券,那么其中有
于是先要确定选哪些奖券。这一步可以直接贪心,先默认取负贡献,然后再贪心地把
接着就是如何构造方案。设一种颜色取正贡献的有
1|8P3269 [JLOI2016] 字符串覆盖
题意:给定字符串
思路:首先,用哈希求出每个串的所有出现位置。
先看最大值。可以考虑
再看最小值。首先,如果一个串是另一个串的子串,显然是把小串和大串重叠,于是可以不用考虑小串。于是可以状压 DP。设
1.
2.
但是第二种转移如果超过了下界那么答案不会更优,于是可以把下界变成0,这样就相当于是前缀min,可以直接维护。
1|9P4331 [BalticOI 2004] Sequence 数字序列
题意:给定一个整数序列
思路:首先,如果严格递增,那么
再考虑更一般的情况,很自然的想法就是把每一段不升的段取中位数,但是可能取完后不递增,这时需要继续合并,于是用可并堆来维护合并和求值。
trick:从特殊情况入手。
1|10P4364 [九省联考 2018] IIIDX
题意:一棵树,要对树上的每个点标上给定的权值,满足每个点上的权值都
思路:情况分两种,一种是所有数都不相等,可以直接贪心放。
一种是所有数都相等,我们先考虑让本层答案最大,因此需要先为每个子树预留一定的数。具体的,我们把权值从小到大排序,然后用线段树维护每个权值左边还能取的权值个数,这样我们确定一个点
1|11P7417 [USACO21FEB] Minimizing Edges P
题意:构造新图G',边数最短的满足若在 G 上
思路:想到了第一步,就是处理出到
然后把这两个数当做一个二元组
于是可以贪心。按
trick:按一定方式给元素定序可以更好处理问题。
1|12[AGC004F] Namori
题意:给定一个
思路:转化成把树黑白染色,然后每次操作相当于对调黑白点的颜色,于是有解的条件是染色后黑白点数目相等。
先考虑树,那么一个点的权值就是子树里黑白点的个数之差,相当于考虑经过当前点连向父节点的边的数量,答案就是所有点的总和。
再考虑偶环基环树。考虑减掉一条边对答案的影响,相当于是这条边右边的点权值减
剩下的就是奇环基环树。此时不再是二分图,一定有一条边连接的两点的颜色相同,那么对这条边操作相当于是黑点数量 +2 或 -2,那么只需让答案增加黑点个数的一半即可。
trick:只有两种颜色的染色,可以考虑二分图的角度。
1|13[AGC010E] Rearranging
题意:有一个
高桥君会把整个序列任意排列,然后青木君可以进行任意次操作,每次选择两个相邻的互质的数交换位置。
高桥君希望最终序列的字典序尽量小,而青木君希望字典序尽量大。求最终序列。
思路:神仙题,那种想半天没有头绪结果一看题解发现好简单的题。
首先考虑如果先手已经操作完了后手应该怎么操作。发现一个性质,如果两个数不互质,那么显然这两个数的相对位置就不会变,于是可以把这样的位置间连边,字典序最大的一组拓扑序就是答案。
再考虑先手的策略。先手要做的就是对每一个连通块定向,使得最大拓扑序最小,可以直接贪心地每个点从小到大连边。这样可以保证每个连通块都是最优的。
trick:交换相邻
1|14CF1073F Choosing Two Paths
题意:给出一个无根树,请从中选取 2 条链,其中任何一条链的端点不能被另一条链包含,请求出符合题意的链对,并使这两条链的公共的点的部分最长,在此基础上链长的和最大。
思路:首先,链交肯定是最长的一条链满足端点度数大于 2,可以直接按类似求直径的方法通过两遍 dfs 来解决。
最后求链长就直接求最长、次长链就行了。
trick:树上的贪心可以尝试直径和长链。
1|15CF1214F Employment
题意:有一个长度为
思路:鉴定为无思维难度,但实现上不好写,细节多。
有稍微好写点的方法。先把
考虑这个式子的差分,发现
trick:有相减的贡献可以考虑差分。
1|16CF1452F Divide Powers
题意:有一个只含有 2 的整数次幂的可重集合,你可以将
思路:思路还好理解,但是不太会实现。
我们发现有3种操作:
1.把
2.把
3.把
发现第二种的贡献比例大于 1,于是肯定先做二操作。如果还差超过
复杂度
1|17CF1469F Power Sockets
题意:初始给出
- 每次操作可以用一条边将一条链中的一个点
和树上某个白点 连接起来, 都变黑。一条链至多操作一次,也可以不操作。 - 操作完后树的权值为根节点到第
近的白点的距离。问操作方案所得树中最小的权值。
思路:想到了每次肯定是把链的中点和深度最浅的白点连起来,而且链肯定是从小往大或从大往小加。
没想到的是可以直接维护
也有更优雅的做法,即维护差分,然后双指针。
1|18CF1493E Enormous XOR
题意:定义
思路:真·诈骗题
首先,如果
其次,如果
trick:从特殊情况入手。
1|19CF1637H Minimize Inversions Number
题意:给定一个
思路:贪心+推式子题。
首先,把一个数移到开头对逆序对的贡献是
我们发现这样还是不好处理,于是考虑找一些性质。有一个结论,如果
trick:通过分析性质简化贡献形式。
1|20P6072 『MdOI R1』Path
题意:一棵树,有边权,要选择两条简单路径,满足没有重合的点,且边权异或和之和最大。
思路:标算
首先,可以通过设置点权来把边权和转成点权和,然后用01trie 取出异或和最大的路径,这时答案分两种情况:
1.这条路径是答案之一,那么就把剩下的子树每个求一遍答案然后取最大值就行,复杂度
2.这条路径上的一部分边被分割开,那么就相当于是以其中一个端点为根,断开链上的一条边,可以两遍求出每个子树和剩余部分的答案,然后加起来即可,复杂度
于是总复杂度就是
trick:树上对路径的操作通常可以差分转成单点操作。
1|21CF1027F Session in BSU
题意:有 n 场考试,每场考试你有两个时间点
思路:简单题。
考虑对每一对限制
如果边数大于点数,那么即无解;
如果是一颗树,那么就有一个点可以不用选,因为要求尽量早,所以就选择最大的点不选;
如果是基环树,那么显然每个点都会被选上。
trick:对于匹配,可以建图,在树或者基环树上处理。
1|22CF1329C Drazil Likes Heap
思路:想了半天怎么把这个操作简化,结果你告诉我可以直接贪?
因为是大根堆,所以每次如果能
这就做完了?
trick:裸的贪心有时候不是那么好想。
1|23CF1601E Phys Ed Online
思路:根据贪心,答案是
1|24CF1693E Outermost Maximums
题意:有一个长度为
你可以进行下面两种操作任意次:
- 设
表示序列 最靠左的最大值的位置,则令 。 - 设
表示序列 最靠右的最大值的位置,则令 。
你需要求出使序列
思路:考场上想到了错贪(其实就是正贪)。
贪心的思路就是对于每一轮,如果操作一的变成的数更小就进行操作一,否则就进行操作二。
考虑怎么维护这个过程。我们可以看成,从大到小考虑每个数,我们先把当前值的所有位置标记成 "未确定要赋成前缀最大值还是后缀最大值",那么访问到一个更小的值的时候,如果这个值最左的出现位置位于一个未确定的位置的左侧,那么这个未确定位置肯定是赋成后缀最大值才更小,同理,如果这个值的最右位置位于一个未确定的位置的右侧,那么这个未确定的位置肯定赋成前缀最大值更小,于是我们可以维护这3种情况的分界点,分界点左侧是要赋成前缀最大值,中间是未确定,右侧要赋成后缀最大值。
实现上,用一个树状数组来维护每个位置是否有值,然后每加入一个值就分类讨论一下即可。
1|25QOJ# 5378. 匹配问题
题意:数轴上有
思路:神仙贪心题。
考虑按A从右到左匹配,考虑当前最右的没有匹配的位置
用线段树维护这个过程就是
1|26P6287 [COCI2016-2017#1] Mag
题意:一棵树有点权,一条路径的贡献是路径上点的点权之积除以路径上点数,求贡献最小的路径。
思路:推出了一些小结论,比如保留全 1 链,而且最多有一个非 1 权值,不过没发现只有 2 才有用。
结论:
- 如果不存在魔力值为 1 的节点,答案为魔力值最小的节点的魔力值。
- 如果存在魔力值为 1 的节点,答案只有可能是以下两种:全 1 链和两条长度相等的全 1 链中间由魔力值为 2 的点连接。
而我们可以不用管 2 的位置,因为这样不会影响答案,那么对每个点维护最长的 1 链和 2 链即可。
trick:对于贡献是乘积,可以多考虑 1 的作用。
1|27[AGC032E] Modulo Pairing
题意:令
思路:好题。
一开始的思路就是错的。。。
正解很神。
首先,把所有数从小到大排序后,我们的选择肯定形如:
蓝线表示选择两个和
证明:
显然,确定了哪些点连蓝、红线之后,他们之间一定是大的连小的,那么只用证明以下的情况不优:
设点为
于是我们二分蓝、红线的分界点即可。
trick:对于求匹配让 max 最小,通常是小的和大的进行匹配
1|28[AGC053D] Everyone is a winner
题意:有一场
假设每名参赛者都能够自由决定做题顺序,请确定如下的条件是否能够对于所有参赛者
- 令
为参赛者 完成前 道题目的时间, 为参赛者 完成前 道题目的时间。条件即为 。
具体的说,在忽略切换题目的时间的情况下,需要确定是否对于每个参赛者
思路:又是一道不会证明的题。
对于第
我们倒序考虑每个人,此时就是对于第
然后就不知道为什么可以证明不用考虑一个人对后面的人的贡献。
然后发现每个人都是一个斜率不超过 3 的折线,直接维护 3 种斜率的直线即可。
设
1|29CF360E Levko and Game
题意:你和你的朋友在一张有
思路:可能算小清新贪心题?(总是想不出来贪心题)。
每条边被改后显然是
首先考虑怎么让
对于一条边,如果
这样就可以判断
接着就是考虑能不能平。
如果
如果
可以在
trick:对于取值有上下界,通常用到的只有上界、下界两个取值。
1|30P2501 [HAOI2006] 数字序列
题意:求把一个序列变成严格上升的序列需要改变的最少元素数量和每个数改变量的最小值。
思路:感觉基于最长上升子序列衍生出了很多有意思的题。
首先,通过经典的 trick,令
然后就是第二问。
有一个贪心结论:对于区间
对于点
因为数据随机,所以复杂度大概是
trick:对于取值有上下界,通常用到的只有上界、下界两个取值
1|31P3564 [POI2014] BAR-Salad Bar
题意:有一个长度为
思路:有一堆做法。
这里记一个优于
首先,满足条件的子串首尾肯定都是
1|32P3584 [POI2015] LAS
题意:有
思路:好像可以直接贪心。
首先把必须选某一边的处理掉,可以用队列维护。
剩下的直接选择两边较大的那个即可。
1|33P4809 [CCC2018] 最大战略储备
思路:抽象题。
直接把所有边排序后从小到大选择,每条边被选择的次数就是当前另一维还剩多少。
trick:如果是常见模型的拓展可以从模型的处理方法来拓展。
1|34P2519 [HAOI2011]problem a
题意:一次考试共有
思路:首先定义一个人的排名是严格高于他的人数加1,然后就可以把每个限制改成:“我是第
我们发现,对
trick:与排名有关,把不同分和同分分来考虑更清晰。
1|35P2893 [USACO08FEB] Making the Grade G
题意:求把一个序列变成单调不降或单调不升的最小代价。
思路:有
考虑在维护序列的同时用优先队列维护当前修改过的序列的最大值,对于当前的数
考虑为什么这样做是对的。如果有逆序对
现在有一个问题,如果修改后
trick:对于单调,可以考虑逆序对的影响。
1|36P4409 [ZJOI2006] 皇帝的烦恼
题意:给定
思路:有很厉害的贪心做法。首先,答案肯定不小于相邻两项的和。其次,一个元素最多出现在
trick:分析问题的上下界。
1|37P8099 [USACO22JAN] Minimizing Haybales P
题意:给一个长度为
思路:考虑假设已经求出了
以上操作都可以用平衡树维护,复杂度
1|38[AGC016D] XOR Replace
题意:给定序列
思路:发现第一次把一个数
trick:添加与全局相关的元素简化情况。
1|39[AGC023F] 01 on Tree
题意:给出一棵
- 每个节点上有一个取值在
中的数。 - 每次你可以选择没有父亲节点的点删除,并且将这个节点上的数字放在当前数列末尾。
- 请你求出这个数列可能得到的最小逆序对数。
思路:对于两个点,假设管辖的 0,1 分别有
于是用优先队列维护当前点的
trick:Exchange Argument
1|40CF888G Xor-MST
题意:两点的边权是点权异或和,求 MST。
思路:可以贪心。如果建出 Trie 树,那么对于一个点的两个儿子,只需两边分别联通后,选一边的点,在另一边查异或最小值然后连起来就可以了。
1|41P3457 [POI2007] POW-The Flood
题意:给定一张地势图,所有的点都被水淹没,现在有一些关键点,要求放最少的水泵使所有关键点的水都被抽干。
思路:首先,如果一个点周围比它低的点有抽水机,那么就不需要再放了。
于是可以把所有点按高度排序,如果从小到大依次判断四周连出去的点中是否有抽水机。这一步可以用并查集维护,把高的点放入四周低的点的并查集中,然后如果没有抽水机,就加一个抽水机。
trick:按照一定顺序对元素排序后再处理问题。
1|42P9128 [USACO23FEB] Fertilizing Pastures G
题意:有
给出一个参数
-
若
,FJ 必须回到 号节点。 -
若
,FJ 可以在任意节点结束他的遍历。
求遍历所有节点的最小时间和此时需要付出的费用。
思路:假设我们当前已经求出了一个点的所有儿子的费用
于是就可以直接按照
trick:exchange argument。
1|43P8293 [省选联考 2022] 序列变换
题意:你手里有一个长度为
这两种操作如下:
- 操作 1:交换形如
的串中 和 之间的两个括号,变换为 (其中 、 为任意串,可以为空,但不一定分别为合法括号序列,下同),它的代价为 乘 中第一个左括号的权值加上 乘 中第一个左括号的权值,其中 ; - 操作 2:交换形如
的串中的 和 ,变换为 ,这个操作不需要代价。
你现在想知道的是,将
思路:终于来写括号序列了。
首先是把括号序列转成括号树,那么操作 1 相当于是把拿出一个点的两个儿子
其次,我们可以从上到下贪心,这样可以把尽量把贡献最小的节点向下传。
因为
当
当
当
当
当
当
当
考虑优化。我们可以从小到大枚举下传的点的权值,然后实时维护当前的权值下传后作为最小值的范围,可以做到
trick:括号序列
1|44P5290 [十二省联考 2019] 春节十二响
题意:给你一棵有
思路:可以直接贪心,每个点维护一个堆表示选择的集合,每次合并用启发式合并即可。
1|45「JOISC 2014 Day1」有趣的家庭菜园
题意:有一个序列
思路:从小到大考虑每个数,此时一个数左右两边比他大的数肯定是连续一段,那么直接将这个数移动到较短的那一段的端点即可,这样不仅单次是最优的,而且不会影响后面的数,所以是正确的。
复杂度
trick:交换相邻项,可以按照冒泡的方法顺次考虑。
1|46「JOISC 2014 Day4」挂饰
题意:JOI 君有 N 个装在手机上的挂饰,编号为
JOI 君的挂饰有一些与众不同——其中的一些挂饰附有挂钩,你可以将其他挂饰挂在挂钩上。i 号挂饰有
此外,每个挂件有一个安装时会获得的喜悦值,用一个整数来表示。如果 JOI 君很讨厌某个挂饰,那么这个挂饰的喜悦值就是一个负数。
JOI 君想要最大化所有挂饰的喜悦值之和。
思路:根据 A,B 的正负性分类。
- A>0,B>0,选择这些挂饰不仅会让答案变优,而且挂钩的数量也不会减少。
- A=0,B>0,这些挂上后就不能再挂东西了,可以放在最后处理。
- A>0,B<0,这些就是用来增加挂钩的数量的,那么对于每种挂钩的数量,我们只需知道挂饰最大的代价。
总结一下,就是先求出第一类贡献,然后用背包求出第三类挂饰的贡献,然后对于每种数量的挂钩,我们按贡献从大到小取第二类挂饰即可。复杂度
1|47「JOISC 2015 Day 1」卡片占卜
题意:有 ABCDE 5 个数,表示有一个序列
思路:做过类似的题目 Password,做法是大致相同的,就是用图论建模。
考虑对于一种操作
因为只用反转两个区间,反转的方式很少,可以简单判断。
trick:区间操作差分成单点操作。
1|48「JOISC 2015 Day 4」防壁
题意:给定
思路:神仙题。
首先,每个防壁的移动是独立的,每次移动是
接着我们先去掉一部分无用的激光。假设有连续 3 次激光的大小关系相同,如
从上一步受到启发,如果防壁的长度极小,每一次都会移动
如果有
注意边界情况。
- 如果没有
和 那么不用删掉这两个点; - 如果没有
,那么就不能删掉 ,因为左端点不一定在 ; - 如果没有
,同上,不能删掉 。
这个过程中我们要至少 3 个点,如果不到 3 个点可以暴力操作。
去掉了
上面的删除是按照
那么我们可以用可删除堆来取出最小的
1|49P3615 如厕计划
思路:首先找合法的充要条件。比如从后往前看,如果最后两个人都是男生,那么显然是不行的;我们一直推下去,就可以得出,如果把男生当做 1,女生当做 -1,那么条件就是后缀和不大于 1。
然后考虑我们怎么重排最优。我们的目的就是让男生尽量靠前,女生尽量靠后,那么可以每次把最后面的一个不合法的男生移动到开头,这样会让中间所有女生的代价加 1,会让后缀和加 1,那么我们需要
trick:找充要条件。
1|50「JOISC 2016 Day 3」电报
题意:给出 N 个点,每个点的出度均为 1,给出这 N 个点初始指向的点
求让所有点强连通的最小花费。
思路:发现考虑连边不好处理,但是考虑删边就更方便一些。如果一个点的入度大于 1,那么就需要删到只剩一条入边,我们肯定是贪心地保留最大的入边。
问题是可能会有环,那么我们就需要断掉一条环边,选择一条最大的非环边,那么就求出每个点最大的入边和不在环上的最大入边,取差最小的一个就行了。
复杂度
trick:添加不好处理,可以考虑变成删除。
1|51「JOISC 2016 Day 4」最差记者 2
思路:到了贪心策略,而且是对的,只不过有线性做法,但是看不懂。
因为是要让改动尽量少,那么就是要让匹配的数量尽可能多,那么就直接找到能匹配的范围内有没有同国家的,有就直接匹配,否则就需要修改。复杂度
1|52「JOISC 2017 Day 1」烟花棒
题意:有 N 人站在一条数轴上。他们人手一个烟花,每人手中的烟花都恰好能燃烧 T 秒。每个烟花只能被点燃一次。
1 号站在原点,i 号
开始时,K 号的烟花刚开始燃烧,其他人的烟花均未点燃。他们的点火工具坏了,只能用燃着的烟花将未点燃的烟花点燃。当两人位置重叠且其中一人手中的烟花燃着时,另一人手中的烟花就可以被点燃。忽略点火所需时间。
求至少需要以多快的速度跑,才能点燃所有人的烟花(此时可能有些人的烟花已经熄灭了)。
思路:显然可以先二分答案,关键是怎么判断是否合法。
有十分高妙的判定方法。首先,根据贪心,如果一个人会把另一个人点燃,那么这一个区间中的人都会被这个人点燃。因此,两个点
判定分为两步。先从
1|53「JOISC 2019 Day1」馕
题意:给定长度为 M 的馕,和 N 个人,第 i 个人吃馕的第 j 米可以获得
思路:贪心好题。
考虑贪心。每次我们选择一个人肯定是要让它刚好取到
__EOF__

本文链接:https://www.cnblogs.com/Xttttr/p/18016129.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧