• 「总结」$pdf$课:$dp$


    枚举根
    可以把每个点抽象成从这个点到根路径上的点全部+1,规则改为两个点可以消去。
    不同子树显然不属于同一个集合。
    我们可以进行操作。
    对于一个点来说。
    相当于给予一个(a)数组。
    求最终剩下的个数和消去的次数。
    那么分(sum-a_{max}>=a_{max})(sum-a_{max}<a_{max})进行讨论即可(dp)出当前根的答案。

    我们可以发现答案是这种形式。

    [c(i)=sumlimits_{num[j]=i}10^j ]

    [ans=sumlimits_{i=1}^{9}ic(i)=sumlimits_{i=1}^{9}sumlimits_{j=i}^{9}c(i) ]

    可以转化为大于等于某个数出现次数的计数。
    直接数位(dp)就可以。

    构造子序列自动机。
    考虑状态((S,T))表示(S)后面接上一个串(T)的子序列。
    这张图是(DAG)
    建图之后考虑对于每一个串计数这个串是多少个串的子序列。
    求出字典序最小的满足条件的即可。

    对于每一个位置取最小限制。
    然后转化成多个限制中必须至少有一个取最大值的。
    那我们处理出每一个点最靠左的最大值的位置是(L[i])
    然后设(dp[i][j])为前(i)个点,最后一个满足最大值的(j)的方案。
    就可以直接(dp)了。

    分区间考虑
    (dp[i][j][k])为区间([i,j])的最小值为(k)的最大收益。
    然后和区间一样枚举最小值的位置转移就可以了。
    这就是笛卡尔树(dp),每次枚举的位置两侧的最小值一定要大于当前位置。

    根据(H)建出笛卡尔树。
    相当于每次消掉最下一层的节点。
    (dp[i][j])为当前节点(i)的子树里面选了(j)个车的方案。
    剩下的列必然只有(sz[i]-j)个。
    行的范围就是当前表示的矩形。

    我们考虑从前向后决定元素。
    那么可以确定第(i)个元素在前(i)个元素的相对大小来使得逆序对的增加量恰好为([0,i-1])
    枚举(j)(i)的祖先,从(i)(j)的方向和(i)(j)的方向分别确定每个元素在当前排列中的相对大小。
    可以发现此时除了这一对(i,j)外。
    其他点的贡献都是([0,k-1])(dp)的时候先假设(i,j)的贡献也是([0,i-1]),然后撤销掉这一贡献即可。

    (f[i][j])表示(S)的前(i)位和(T)的前(j)位匹配的最长长度。
    那么我们设(dp[i][S])表示(S)的前(i)位中,(f[i])的具体差分情况为(S)的方案。
    因为(0leq f[i][j]-f[i][j-1]leq 1),所以差分可以用二进制表示。
    这就是(dp)(dp)

    假设我们要求的(and)值为(w)
    那么我们可以设(dp[i][a][b][c][d])表示前(i)位中(x)(y)分别与(L_x),(R_x),(L_y),(R_y)的关系的(w)二元组对数。
    然后把(a,b,c,d)压在一起。
    变成(dp[i][S])即可。

    假设已经知道了格子的颜色可以用插头(dp)判断是否可行。
    (f[S])为轮廓线上匹配状态为(S)是否可行。
    那么我们套一个(dp)上来。

    [dp[i][j][C][S] ]

    (dp)((i,j))这个格子轮廓线上的颜色为(C)(f)的结果为(S)的方案数。

    仍然设(dp[i][k])为前(i)位,选了(k)段的最优值。
    然后显然可以用决策单调性整体二分优化决策转移。
    分治的时候用类似莫队的方法搞出每一块的贡献即可。
    复杂度还是(O(nklogn))

  • 相关阅读:
    [Linux]yum开启rpm包缓存
    [Linux]centOS7-1-1503-x86_64下安装VM-TOOLS
    [Linux]centOS7下RPM安装Perl
    vue 之 pageage.json 和 webpack.config.js
    node 之 apache
    node 之 express
    node 之 基础知识
    npm nvm nrm的关系
    echarts 学习笔记
    git 操作学习
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/12512487.html
Copyright © 2020-2023  润新知