【笔记】贪心

时间:2021-07-16
本文章向大家介绍【笔记】贪心,主要包括【笔记】贪心使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

若干见到的题和思想

假设最优的结果的形式,然后“反悔”

感觉就是以这种方式添加条件(由于已经是答案,我们再做修改的话已经没有“后效性”,因为修改后可以直接当成答案,从而可以比较优劣),然后倒推出实际上最优的结果形式
例题 [USACO12FEB]Cow Coupons G
思路:我们先以 C 排序,然后假设最优答案形式就是其中随意的若干项。接着考察有无更优策略时我们发现,对于一个用了券的物品,如果其前面存在一个买都没买的物品,那么显然不买当前物品而用这个券去买前面那个,这个新的答案会更优(物品个数不变,还多了一些钱);于是就“反悔”去买了前面未买物品中 c 最小的那个
那么经过有限次这种“反悔”,答案的形式就变成了:前面连续一段都被买,且 K 张券都用在这里了,然后后面断断续续地不用券买了一些。
于是我们推出了答案的(一种可能可做的)形式。在此题中,我们只需要扫一遍得到购买每个长度的前缀连续段对应的最小花费(用堆做),以及对应的剩余钱在后半段最多能买多少物品(由于此时都不用券,我们只需要再用一个堆维护,随着预算的缩减和指针的后移不断弹出已经不属于当前区间的和若干最贵的物品,直到在预算内就行了(有一个小证明:由于贵而被弹出了的物品,不可能因为之后有一个因为不在区间而被弹出的物品而重新回到堆中);另外,此题对于此处又用一个数组维护了“是否在堆内”的信息,并用一个单独的变量记录堆此时的大小,这用来解决需要弹出堆内指定元素的问题)

原文地址:https://www.cnblogs.com/zhyh/p/15021390.html