反悔贪心&模拟费用流
贪心是一种常用的算法,它能够获得局部最优解,但我们往往需要的是全局最优解,所以我们在贪心的时候加入和反悔的机制,让他能够得到全局最优解。
由于网络流中的退流操作本质上也是反悔贪心,所以在实现反悔贪心时类似费用流的,也会被成为模拟费用流。
一般的实现时在贪心之后加入一个和贪心值相反的值或重构问题使得变成原问题等方式实现。
CF865D Buy Low Sell High
题意:每天可以选择消耗
这个问题也叫老鼠进洞问题。
我们考虑到达第
但由于一天只能买入一张或者卖出一张,在类似 1 2 100
的结构中贪心就时错误的。
不难发现,如果
令
右式的后两项就是我们贪心的结果,这也就意味着,如果我们再在后面贪心的取一次
题目有每个数只能买入或卖出一次的限制,所以我们只要在贪心取数的时候额外加入一个
使用小根堆维护最优解,最终复杂度为
Luogu P1484 种树
题意:给定一个长为
因为不能选择相邻的数,所以在取了最大值
例如在 1 99 100 99 1
可以卡掉纯贪心。
考虑
但它同时也去多取了一个数,所以考虑
发现这样不影响限制,维护双线链表和大根堆即可。
集训队互测 Round1 Astral Birth
题意:给定一个长为
不难证明最优答案必然把答案划分成若干个连续的
在分割段数减少的时候,我们需要删去一些连续段来使得损失最小。
我们会发现三个性质:
- 删去边上的串可以减少一次分割,删去中间的串可以减少一次分割。
- 删去相邻的两端一定不优。
- 可以保留一个形如
的结构。
所以我们需要求的就是看有多少个不相邻的连续段在最终答案中不做贡献,先枚举两端的段取不取,在考虑中间的。
这就变成了类似上一题的做法,负责都为
在段数小于
CF730I Olympiad in Programming and Sports
题意:每个人有一个数值
用费用流的思想考虑这道题,会发现每个人会有四种状态:
- 没有被选,准备去编程
- 没有被选,准备去运动
- 被选去编程,但想去运动
- 被选去运动,但想去编程
对于每一种选择,维护一个大根堆,在选择状态 3 或 4 时,需要在 1 或 2 中找一个补齐空缺保证复杂度。
每一次操作后
CF280D k-Maximum Subsequence Sum
题意:维护一个序列,支持单点修改和区间内至多k段不相交子段和。
比较经典的 GSS 问题,每次找到区间最大的子段,其对答案做出贡献,然后将区间内的所有值取反。
用线段树维护区间和\最大前缀\最大后缀\最大子区间,复杂度为
[NEERC2016]Mole Tunnels
题意:给定一个大小为
考虑只有一种鼹鼠时,贪心策略是让鼹鼠走到距离最近的还有值的点,但这时就会出现问题,加入我们取出其中的一条链来看。
现在在最中间有一个鼹鼠,用贪心的策略,我们假设它选择了往右走两步(如果往左反转之后等效),答案为
这是又来了一只鼹鼠,刚好在最右边的点,则用贪心的策略它会走向最左边的节点,答案为
但是我们发现,答案应该而
假如一条边的两端都有一只鼹鼠,交换他们为位置与不交换是等效的,但是浪费了
所以我们考虑加入类似网络流中的增广机制,如果一条边
所以我们用一个数组存储每条边目前累计走过的次数和方向即可。
由于树结构为完全二叉树,所以复杂度是
[NOI2019] 序列
题意:给定两个序列
这样的限制条件很想费用流的模型。
首先考虑转化条件,不好处理至少有
费用流模型有5种情况:
- 选取一组下标相同的数。
- 选取一组下标不同的数,消耗
的不同流量(这个是所有决策中局部最优的)。 - 选取一组
与 ,且 与 已经被选,回复 的不同流量。 - 选取一组
与 ,且 已经被选。 - 选取一组
与 ,且 已经被选。
由于不同决策的优先度不同,在满足要求的情况下贪心顺序应为:
CF335F Buy One, Get One Free
题意:给定一个长为
考虑费用流模型:我们先贪心地从大到小选择和白嫖,如果到后面有更优的决策时,我们会放弃白嫖之前的某一个,而换成给他付钱,然后白嫖另外两个。
由于价格相同的不能同时取,所以考虑将所有价格相同的一起处理。
设白嫖的馅饼价格为
如果
如果
发现,上面一种情况相当于是有一个代价为
AT AGC018C Coins
题意:给定
考虑每个数先直接选择
考虑费用流模型:
- 在
时,选择 , 。 - 在
时,选择 , 。 - 在
时,选择 ,同时将已选择的 改为 , 。 - 在
时,选择 ,同时将已选择的 改为 , 。
使用四个堆维护即可,复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】