前言:花了三天,终于刷完了深搜专题的所有题目 纯看题解,copy代码
剪枝的方式有很多
从大的方面讲,会有两大类:
1.可行性剪枝
2.最优性剪枝
关于可行性剪枝的几种实现方法:
1.上下界剪枝
1)前缀和预处理
2)dp预处理
3)直接估计
2.奇偶剪枝
总而言之就是根据枚举方案是否与目标有冲突,或无法实现
有些可以在枚举前就预测出来,如能否整除什么的
有些需要在过程中实现,如加上预计最大情况仍小于目标
最优性剪枝中最基本的套路就是:答案取最小值时,当前值已大于已得出的答案,直接返回
在这个基础上可以估计以哪个顺序更容易得到最优解,这样可以使剪枝发挥最大作用
有时在枚举前就可以预估出答案大约在那个区间内
还有些优化也是十分常用的:
1.避免重复枚举,这一类最基本的就是mark掉,但每次还是会在循环中访问到,可以在链表中直接删除
2.优化最后一层循环,有时完全可以用贪心或者其他方法优化掉这一层
3.有时套用算法可以检测出很多不可能的情况
在做这种深搜题时,枚举的量也是一个关键因素
小结:剪枝这种东西是必要的,尤其是上下界剪枝和最优性剪枝,仔细思考把自己能想到的剪枝都丢上去,有时还有有一些常数优化,大概就讲这么多吧