方法及其优化技巧总结
公式题:
区间贡献拆为点贡献。
公式全部拆开求和算值。 和积和
区间最大值满足单调,排序后计算。max
动态规划:
先打暴力再优化。
看数据范围猜测状态。
前i个选了j个.
多个选择考虑背包,
搜索:
搜素题大多是剪纸多,加记忆化,分类讨论都需要 +1-1*2
看到数据范围非常小无非就是高复杂度的dp和搜索,但当dp不利于操作时就考虑搜索,搜索不仅可以考虑记忆化剪枝,还可以考虑双端搜索减少复杂度。
多次查询,进行修改查询操作困难时就考虑离线操作。mst
反悔贪心
特点:有一定选择限制的最大/小值,影响这个数也影响下一个,可以用dp做但是数据大到无法用 dp。
反悔贪心博客
通常反悔贪心的题都可以用 dp 实现,当数据较大时可以考虑贪心了,但是如果没有十足的把握还是先写出 dp 再用这个。
二分答案
特点:满足单调性,求最大值最小,第k大的数是多少,缩小范围直到确定答案是哪个数(隐性)。
最大值最小
放学路
C. 野火
看到这点一定要去想到,有可能他会说最大值是什么,这也可能是二分答案,尽量向那方面去靠。
第k大的数是多少
Sugar Water 2
这个就比较难想,但是遇到这种题时除了二分答案就无从下手,我们通过二分答案尝试答案,然后这个答案进行如减操作,然后再二分查找统计个数。
缩小范围确定答案
P2824 排序
Median Pyramid Hard
这个很难想到,我们通过建模转化为 01 串的形式判断最后的结果是否为符合我们的条件,不断调整边界,最后就会得到我们想要的那个答案。
矩阵乘法
矩阵乘法博客
特点:\(n\) 非常大 \(m\) 却非常小或者某一极端,求方案数,强制走 \(k\) 步。
当遇到数据范围极端地大时就可以考虑构造矩阵进行矩阵快速幂,先从部分分入手找规律地构造矩阵。
注意因为矩阵快速幂本质还是加速递推式,所以开某些情况下灵活变通。
双队列优化
P6033 合并果子 加强版
P7078 贪吃蛇
特点:数据满足单调性,要求重复取出最值且更新最值。
将第一个队列从小到大排序后加入元素,每次取出在两个队列队头取出最小值然后将两个数的和放入第二个队列中,因为第一个队列满足单调性,每次取出最小值放入第二个队列也是满足单调性的。
数据非常极限时可以适当切换排序,比如值域非常小可以用桶排。
哈希:
回文串,循环节相等考虑哈希。