方法及其优化技巧总结
公式题:
区间贡献拆为点贡献。
公式全部拆开求和算值。 和积和
区间最大值满足单调,排序后计算。max
动态规划:
先打暴力再优化。
看数据范围猜测状态。
前i个选了j个.
多个选择考虑背包,
搜索:
搜素题大多是剪纸多,加记忆化,分类讨论都需要 +1-1*2
看到数据范围非常小无非就是高复杂度的dp和搜索,但当dp不利于操作时就考虑搜索,搜索不仅可以考虑记忆化剪枝,还可以考虑双端搜索减少复杂度。
多次查询,进行修改查询操作困难时就考虑离线操作。mst
二分查找
特点:满足单调性,
二分答案
特点:满足单调性,求最大值最小,第k大的数是多少,缩小范围直到确定答案是哪个数(隐性)。
最大值最小
看到这点一定要去想到,有可能他会说最大值是什么,这也可能是二分答案,尽量向那方面去靠。
第k大的数是多少
这个就比较难想,但是遇到这种题时除了二分答案就无从下手,我们通过二分答案尝试答案,然后这个答案进行如减操作,然后再二分查找统计个数。
缩小范围确定答案
这个很难想到,我们通过建模转化为 01 串的形式判断最后的结果是否为符合我们的条件,不断调整边界,最后就会得到我们想要的那个答案。
矩阵乘法
特点:\(n\) 非常大 \(m\) 却非常小或者某一极端,求方案数,强制走 \(k\) 步。
当遇到数据范围极端地大时就可以考虑构造矩阵进行矩阵快速幂,先从部分分入手找规律地构造矩阵。
注意因为矩阵快速幂本质还是加速递推式,所以开某些情况下灵活变通。
双队列优化
特点:数据满足单调性,要求重复取出最值且更新最值。
将第一个队列从小到大排序后加入元素,每次取出在两个队列队头取出最小值然后将两个数的和放入第二个队列中,因为第一个队列满足单调性,每次取出最小值放入第二个队列也是满足单调性的。
数据非常极限时可以适当切换排序,比如值域非常小可以用桶排。
单调队列优化
特点:长度固定区间、最大值、满足单调性。
贪心的思路去掉了永远不可能用到的状态,使得状态唯一且最优。
并不要迷信单调队列但也不要忘掉,记得还有线段树区间最大值的方法转移。
反悔贪心
特点:有一定选择限制的最大/小值,影响这个数也影响下一个,可以用dp做但是数据大到无法用 dp。
通常反悔贪心的题都可以用 dp 实现,当数据较大时可以考虑贪心了,但是如果没有十足的把握还是先写出 dp 再用这个。
多变量时同一变量使得满足单调性。
哈希:
回文串,循环节相等考虑哈希。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY