贪心+构造练习
菜就多练。
贪心和构造有一定相似性(都不会做),放在一起做吧。
1. [ABC123D] Cake 123
热身简单题。利用堆进行贪心。
发现排序后都取端点一定是最值,然后随便一个序列中向后挪一个位置都有可能是次大值。
于是用堆维护,每次弹出最大的,然后向后拓展三个状态塞到堆里面。注意可能一个状态会被多次拓展到,要标记去重。
反正数据范围小,
另一种做法是先求前两个序列中前
2. P6155 修改
排序不等式,邻项交换,直觉。
首先注意到修改过的数要尽量少,可以随便证一下。
由排序不等式,假设已经求出每个数的修改次数,那么就按排序不等式逆序和加起来。
来求每个数的修改次数,先把原数组排序,考虑在值域上依次枚举,维护一个集合
枚举到
如果
注意到
3. [AGC004D] Teleporter
树上贪心,从叶子考虑。关注不变的事情(不争的事实),关注答案的形态。
发现有
首先可以证明
于是可以转化题意为:以
关注一些总是不变的事情:最深的叶子在操作后的深度恰好为
于是DFS,过程中如果当前子树的高度为
4. [AGC007B] Construct Sequences
看到单调性构造想差分。利用反函数性质将下标化简。
来看剩下的限制,为了
为了利用上差分,我们代换一下,设
尝试相邻两项相减来做差分,即
于是一组合法的解为
5. P4053 [JSOI2007] 建筑抢修
反悔贪心,先随便贪然后设计反悔。
首先随便贪,但要有一定的正确性。这里的限制主要是报废时间,于是报废时间小的要先做。
如果做到一个位置不得不报废了,就查看要不要反悔,如果之前做过的最长耗时比这个位置的用时长,那么用这次的替换之显然更优,因为使得总用时减小了,并且这样一定不会使当前位置报废。
就这样反悔,用大根堆维护最长耗时,
也有不反悔的做法,正着做,每个任务显然要尽量在贴近报废时去做,并且优先做用时少的,用线段树/ODT维护区间推平即可,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】