贪心研究
定义
贪心是寻找最优解的一种常用方法,本质上就是将一个问题分为若干个步骤,每一步都采取使当前最优的方案,最后叠加得到正确结果。顾名思义,贪心的人往往只关注眼前,也就是说贪心算法不具有回溯功能,所解决的问题有一个前提条件:不具有后效性,即分成的若干部分相互独立,互不干扰。
贪心的基本步骤
- 先将问题分成若干相互独立的部分。
- 再对于一个每部分,寻找局部最优解。
- 最后将局部最优解结合起来成为最后的解。
一些提示
我们知道贪心只能解决无后效性的问题,那对于有后效性的问题,如:01背包问题时,采用贪心有时能拿部分分(万不得已之时可以这样),因为贪心的代码实现比较容易.
然后,对于贪心能否使用,应该证明。但是,比赛的时候往往是一种直觉,手玩样例之后就一般有所发现,有时候我们在那种环境下也无法或不能严格证明,不妨大胆尝试(记得之后再自己造几个数据看看对不对哦)。
(下面的一些证明都是我觉得对的,不严谨之处多多包含!!!)
一些例题
P1223 排队接水
P1031 [NOIP2002 提高组] 均分纸牌
这是我第一次证明的贪心(
上面都是一些比较简单的题目,难度最高黄题(忘了有没有),下面介绍几个绿题以上的。
P1766 液体滴落(数学与贪心的结合)
P2625 豪华游轮(01背包与贪心的结合)
总结
那么,通过这么这几道例题,我们可以发现,贪心只是一种想法,帮助我们解题,它往往与其他东西结合起来(包括树等)。难度越大,题目的综合性也就越大。