• NOIP/CSP各种技巧思路合集


    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 定理。
  • 相关阅读:
    重学数据结构系列之——图的储存
    重学数据结构系列之——森林之并查集(Disjoint set)
    nginx的sbin和conf文件不在同一目录怎么装安全狗
    优先队列解哈夫曼编码问题之带权路径长度
    重学数据结构系列之——堆及堆排序
    搭建git私有服务器及同步更新自己网站的文件
    void类型指针的基本用法
    关于c++中const的基本用法
    1054 求平均值 (20 分)
    数数
  • 原文地址:https://www.cnblogs.com/conprour/p/15265374.html
Copyright © 2020-2023  润新知