qwq
DP 类
- 累加和的 DP 数组可以前缀和优化。
- 滚动数组优化。
- 单调队列优化。
- 斜率优化。
- 遇到 DP 状态类似“ \(dp_i\) 表示第 \(i\) 个元素必选的 xxx 代价 ”时,可以在后面加上一个空元素,以 \(dp_{n+1}\) 作为答案。
- 要求答案恰好选择 \(m\) 个物品(或数字之类),可以初值赋值成
-INF
,给最初状态赋值成 \(0\)(比如dp[0]=0;
)。最简单的例子就是背包要求空间恰好为 \(m\) 。
- 矩阵优化。
- 倍增优化。
- 卷积,生成函数,数学方法求出通项等。
- 题目要求满足整除某个数字等条件,记录一维余数的大小。
- 对卡特兰数要敏感。(看出来了基本就是白捡分啊)
区间类
- 差分,轻松将区间加等差数列改成区间加和。
- 对于一个区间 \([l,r]\),可以转化成前缀和相减的形式入手。
- 扫描线思想,线段树上二分。
- 把树形结构转化成 dfs 序区间,可以搭配线段树区间维护。
树上问题类
- 无论何时要考虑树为链的特殊情况。没思路的话可以作为切入点,写正解的话可以防止被 Hack 。
- 树上背包:注意循环顺序。
- 换根 DP。
- 树上贪心:优先选 LCA 深度大的路径。
数据结构及图论类
- 遇事不决,线段树维护。
- 线段树上二分。
- 线段树优化建图。
- 扫描线思想,把二维转化成一维。
- 遇到麻烦的情况,考虑建立超级源点或者虚点作为起点或者中转。
- \(n,m\) 同阶时求全源最短路不要用 Floyd,要用 dijk(有负权要用 johnson 全源最短路
,但应该不会那么变态)
字符串类
- Hash 写暴力很好用,常和二分结合。
- Trie 树可以处理二进制异或问题。
- 循环节相关别忘记 KMP 。
常数类
- 函数多次调用的时候可以存到一个变量里。
- 善用
inline
。
register
被弃用了,不知道能不能用但至少没有优化了。
- 循环枚举时尽量降低常数。
杂类
- 遇事不决离线试试?
- 正难则反,补集转化。
- 容斥原理。
- 整体贡献转化为单独贡献。举几个简单的例子:
- 多个图形包含了多少个点 \(\Rightarrow\) 每一个点被多少个图形包括。
- 有关平均数的 DP,可以考虑把每个元素价值减去平均数,最简单的例子:均分纸牌。
数学类
- 杨辉三角类似递推转成组合数计算。
- 组合数次数太大用 Lucas 定理。
posted @
2021-09-13 22:58
conprour
阅读(
232)
评论()
编辑
收藏
举报