贪心中“换”的思想

”换“:

在贪心中,有一种很神奇的思想,那就是“换”。
它的基本思路是:当前能选这个物品 i ,就选上;如果选不上,就找到之前的最“劣”的一个 j,如果 j 劣于 i ,就用 i 替换 j,否则就不选 i 了。

“找最劣的”这一过程一般用优先队列实现。

例子:

1.【UVa1153】Keep the Customer Satisfied 顾客是上帝

大意:有 n 个工作,每个工作有需要的时间 qi 和截止时间 di ,输出最多能完成几个工作。

首先排序:一个工作到对应的 di 后就不能再完成了,因此按 d 排序。

分析优劣: 如果一个工作耗时长又逼得紧,另一个工作耗时短还留的时间长,那么后一个工作是优于前一个工作的,也就是如果这两个工作只能选一个,那必是选后者。

具体做法:从左往右扫,工作能完成就完成,如果遇到了时间不够的,就在已完成的工作中找到一个劣于它的一个工作,替换掉。

2.【Codeforces767E】Change-free 找零钱

大意:你知道接下来 n 天每一天的花费 ci 。这个城市的钱只有 100 1 。你一开始有 m 1, 无限个 100 。如果你在第 i 天给售货员的钱不是正好 ci 元,他就会产生 (100(cimod100))wi 的不满意度,并找给你 (100ci) 1 wi 也是你预先知道的。求最小的不满意度(每一天的不满意度的总和),并输出每一天的方案(与话题无关)

分析特性: 可以分析出零钱要么给他正好,要么让他全找零。这样不会更劣。
首先排序: 时间序,不用排
分析优劣: 先 ci=cimod100 。另 gi=(100ci)wi g 大的更应选。

具体做法: 按时间顺序扫,零钱能给他正好就给他正好,否则找之前给他零钱的最劣的那一次,反悔,退钱,让他那次找钱,这样零钱数加100,把零钱给这次的售货员。

3.【BZOJ2151】种树

(不同于以上两个题)

大意:有一个圆形花坛,有 n 个位置,每个位置都有一个美丽值 Ai 。你要在这 n 个位置种 m 棵树。种在 i 位置,就获得了 Ai,树不能相邻,求最大的 iAi

特征分析:不是简单的贪心,怎么办???
首先排序: 有任何顺序?
分析优劣:不能简单地选最大的种上。因为:对于花坛的一部分 19 20 19 ,如果只选最大的,即20,那没有选两个19 优。但如果只选 1 个,那必是选 20。最终比较优劣还是只能比较大小。
具体做法: 考虑这样一个神做法:
1 把所有的 Ai 装进优先队列(意外吧)。
2 贪心地找到当前最大的 Ai ans+=Ai ,弹出 Ai 和原花坛中 i 的左右相邻的 Ai1,Ai+1 ,把 tmp=Ai1+Ai+1Ai 装进优先队列中。
3 再重复 m1 2 操作。
4 ans 即是答案。
类似思路的还有 【BZOJ2426】【HAOI2010】工厂选址。

总结

不得不说,这思路很强,以后贪心时,要想一想这种做法,没准就 AC 了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值