zoukankan      html  css  js  c++  java
  • 递推知识点小结

    递推

    状态

    1. 有什么,设什么
    2. 要什么,设什么
    3. 想什么,设什么
    4. 差分
    5. 存路径,存字符串
    6. 暴力存维

    状态方向

    1. 顺推
    2. 倒推

    转移方程

    1. 策略
    2. 划分
    3. 补集
    4. 容斥
    5. 费用提前计算
    6. 阶段内转移(多选)

    转移方向

    1. 顺转移(压范围)
    2. 逆转移

    循环位置

    枚举顺序

    1. 顺序(单选)
    2. 倒序(无限选,多选可以转向此处记次数)
    3. 区间枚举(区间划分问题和区间递推)

    实现方式

    1. dfs
    2. bfs(拓扑排序)
    3. 阶段

    考虑角度

    1. 单调性
    2. 维护的角度
    3. 最优解与不优解的充分和必要条件
    4. 单个问题,忽略条件,整体来看,状态思想
    5. 递推优化dfs

    最优子结构性质

    1. 加法恒满足
    2. 不满足分类讨论

    试填法

    标志

    1. 求第几个方案
    2. 求方案

    做法

    1. 求方案
    2. 从大到小试填
    3. 求出确定了这个状态下的方案数

    模型

    1. 序列划分成区间

    线性递推

    序列

    其实就是子序列问题

    LIS

    (f_i=max_{j=1}^{i-1}(f_j)+1)

    (f_{++t}=a_i(a_igeq f_t))

    (f_j=a_i(f_j>a_i),j)尽可能小

    (贪心优化)

    lCS

    (f[i][j]=max(f[i-1][j],f[i][j-1])(a[i] eq b[j]))

    (f[i][j]=f[i-1][j-1]+1(a[i]=b[j]))

    LCIS

    (f[i][j]=f[i][j-1](a[i] eq b[j]))

    (f[i][j]=max_{k=1,a[k]leq b[j]}^{i-1}(f[k][j-1])(a[i]=b[j]))(决策集合优化)

    成为LIS的最少修改次数

    len(总)-len(LIS)

    成为LSIS的最少修改次数

    len(总)-len(LSIS(b))((b_i=a_i-i))

    切入点

    1. 前i个(可以表现结尾)和以第i个结尾

    方法

    1. 构造新序列

    网格图问题

    考虑点

    1. 行列
    2. 对角线
    3. 矩形(枚举2个顶点,cow式枚举)
    4. 轮廓
    5. 长宽为1

    奇特思路

    1. 拆行成列
    2. 行列独立

    背包

    01

    (f[i][j]=max(f[i][j],f[i-1][j-w_i]+c_i))

    (f_j=max(f_{j-w_i}+c_i,f_j))(倒序枚举)

    完全

    (f[i][j]=max(f[i][j-w_i]+c_i,f[i-1][j]))

    (f_j=max(f_j,f_{j-w_i}+c_i))(顺序枚举)

    多重

    1. 01二进制拆分
    2. 单调队列
    3. 可行性问题转完全记次数

    分组

    (f[i][j]=max(f[i][j],f[i-1][j-w_k]+c_k))

    (f_j=max(f_j,f_{j-w_k}+c_k))(倒序枚举)

    区间问题

    切入点

    维护

    1. 枚举右端点,寻找左端点性质

    关系

    1. 左右端点排序
    2. 包含

    状态

    1. 位置,区间(设的状态)

    区间递推

    标志

    1. 相邻两点合并
    2. 具有区间性(如dfs序)

    模型

    dfs序

    1. 根节点在序列中划分子树
    2. 一段区间可以对应一棵子树
    3. 子树可以拆分,区间也可以拆分

    环形递推

    切入点

    • 先拆环成链,再
    1. 再补一截
    2. 二次递推
    3. 记录一截
      拆环划分
    • 区间长度作为阶段

    进制压缩

    标志

    1~20间的数据范围,即极小的数据范围

    切入点

    1. 不限于二进制(二进制更快)
    2. 灵活运用二进制运算((wedge,&,|,!),~)
    3. 多预处理
    4. 多剪枝

    绝对值问题

    切入点

    模型

    1. (sum_{i=1}^n|x-a_i|)最小,取中位数
    2. (sum_{i=1}^n|b_i-a_i|)暴力存维

    有后效性的递推

    高斯消元

    细节

    1. 先增广后eam防错
    2. 从最高位消比较好

    数学期望

    切入点

    转移方式 特点1 特点2 特点3
    公式 概率很固定 枚举方案 要判非法状态
    顺推 概率较固定 阶段转移 要判非法状态
    倒推 概率不固定 点点转移 不判非法状态
    1. 样本空间无限无后效性递推处理

    模型

    条件概率

    切入点:数学归纳法证明概率相等

    二进制运算

    切入点:

    1. 二进制运算不进位
    2. 间接概率转移

    有向无环图

    切入点:

    单个点,单条边,环,图转dag,dag转树,森林合并

    异或和路径

    切入点:

    1. 线性基
    2. 瞬间转移
    3. 环环转换
    4. 二进制拆分

    细节

    1. 自环

    数据范围

    1~5暴力存维

    1~20进制压缩

    50~100 (O(n^4))

    100~300 (O(n^3))

    1000~9000 (O(n^2))

    $10^5$ (O(nsqrt{n}))

    $10^6$ (O(nlog^n))

    $10^7$ (O(n))

    (10^9)~ (O(log^n))

    树形递推

    标志

    1. 有依赖的类背包问题
    2. 树上的问题

    切入点

    1. 森林合并
    2. 无根变有根
    3. 换根法二次递推(不限于最优化问题,如要求多个节点特征也可用)

    细节

    1. 叶结点特判

    优化

    预处理

    贪心,排序

    转换模型

    二进制优化

    二进制压缩

    倍增

    1. 转移方向确定
    2. 循环节
    3. 同余
    4. 最值(ST表)
    5. 第k大

    二进制拆分

    二分

    空间优化

    滚动数组

    1. 异或版
    2. 与版

    动态数组

    1. vector
    2. new

    区间和

    前缀和

    树状数组

    性质

    1. 一棵树
    2. x所包含的数据范围为(x-lowbit(x)+1sim x)
    3. x的父节点为(x+lowbit(x))
    4. x的最远子节点为(x-lowbit(x)+1)
    5. x的子节点为(x-2^k),其中,(0<2^k<lowbit(x))

    区间最值维护

    • 修改
    1. 更改原数组
    2. 暴力从子节点中获取数据
    3. 跳到下一个节点

    时间复杂度:(O((log_2^n)^2))

    • 查询
    1. 如果r的包含数据范围在([l,r]),计入答案
    2. 如果不包括,查询([l,r-1])

    时间复杂度:(O((log_2^n)^2))

    线段树

    1. 区间合并性
    2. 区间信息快速更新性(标记下放)

    维护

    基本思想

    1. (思路)从简单到困难,特殊到一般
    2. (枚举)确定一个枚举点,再寻找最优解,提供暴力
    3. (信息)利用以前的信息求出现在的信息

    栈与队列

    单调性

    单调队列

    1. 决策范围单调

    优先队列

    如双堆对顶(动态维护第k大)

    平衡树

    可维护最值

    二分(二分,三分查找)

    离散化

    列式

    其他维护方式

    矩阵快速幂

    辅助1

    斜率优化

    截距版

    1. 单调队列——决策范围单调+斜率单调
    2. 单调队列+二分查找——决策范围单调or斜率单调[倒推]
    3. 多比较平衡树——无单调性

    斜率版

    完美例题

    思路过程(可以推广到整个斜率优化)

    1. 上凸三角形和下凸三角形以及其本质
    2. 维护上下凸壳
    3. 单调队列和平衡树
    4. 函数的单调性,用图像研究问题
    5. 只考虑问题的三个点,简化研究,再推广

    四边形不等式

    常见模型

    最大相同矩阵

    1. 按行枚举,再按列枚举
    2. 暴力预处理高度
    3. 单调队列维护该列最左能到达范围

    数列前缀和

    1. 分治
    2. 矩阵快速幂
    3. 倍增前缀和

    一维无乘积决策单调性

    [f_i=max_{l_ileq a_jleq r_i}{f_j} ]

    (l_i)是否单调 (a_j)是否单调 (r_i)是否单调 维护办法
    单调队列;离散化+线段树or树状数组
    离散化+线段树or树状数组
    (double set);离散化+线段树or树状数组
    离散化+线段树or树状数组
    离散化+线段树or树状数组
    离散化+线段树or树状数组
    离散化+线段树or树状数组
    离散化+线段树or树状数组

    习题

    随机序列

    有一个长度为n的随机序列,元素范围([1,x]),每个数出现在每个位置概率固定,接下来有m次试验,每次实验有一个([l,r])表示研究随机序列的区间([l,r]),并生成一个随机序列,把试验结果记做区间中的最小值,现在询问所有试验结果最大值的期望,(x,nleq 300)

    迁徙

    有n个东西向的村庄,自西向东标号为1~n,第i个村庄有一个属性(a_i,b_i),定义两个村庄i,j(i<j)的距离(dis(i,j)=sum_{k=i}^jb_k)

    现在有q个人,每个人有一个大转盘和一个要行走的最多距离x,转盘上有36个点,标号1~36,有一个点p被标记,从村庄s出发,向东移动,如果目前停留的村庄为i,就把一个球放在转盘上的点1,每次顺时针旋转(a_i)格,如果能够走到点p,则下一个前往的村庄j为满足(a_igeq a_j)条件下,距离最近的村庄,如果不能走到p,则下一个前往的村庄j为满足(a_i< a_j)条件下,距离最近的村庄,如果不存在下一个前往的村庄,就停止不动,请输出每一个人所能最终到达的村庄编号。

    (1leq nleq 10^5,1leq a_i,b_ileq 10^9,1leq pleq 36,qleq 10^5)

    奇怪的多元组

    给出n个(m)元组以及其序号,现在有q个询问,由三种询问组成:给出m元组的序号,删除这个m元组;加入一个m元组;给出数字a,b,表示查询m元组中第a元的最小值。(nleq 10000,mleq 100,qleq 5000).

    决斗

    给出一个(n imes m)的网格图,保证m为奇数,从网格第一行的中间开始,在第一行的上面放上数字((m+1)/2),然后一次向两边放数字,放的数字依次递减,如(m=5),你应该放的是(1 2 3 2 1),现在有一个人在网格图上,初始位置((s,t))已经给出,背对着第一列,现在该人可以等概率向上,向下,向右,向左,留在原地转身射击,询问其射中的数字的数学期望,(n,mleq 1000)

  • 相关阅读:
    C# NameValueCollection
    visual studio使用技巧创建自己代码片段
    C#在DataTable中使用LINQ
    [转]C# 中的.pdb/ .vshost.exe/ .vshost.exe.manifest文件讨论
    C#自定义控件在添加引用后不显示在工具箱的解决方法
    Java 工程师
    redis-CRC16
    sql server-当天日期减去一天 应该如何写
    清除访问Windows共享时缓存的凭据
    cmd下查看当前登陆用户
  • 原文地址:https://www.cnblogs.com/a1b3c7d9/p/10957828.html
Copyright © 2011-2022 走看看