• DP Rush


    这个东西怎么 Rush 啊。。

    斜率 DP

    如果有 \(a_ib_j\) 这样的东西,就用斜率 DP。

    也就是求截距最值,比如 P2120 [ZJOI2007]仓库建设 中有如下 DP:

    \[f_i=f_j+x_i(s_i-s_j)-(t_i-t_j)+c_i \]

    \(y=kx+b\) 化作 \(b=y-kx\),那么有

    \[[f_i-x_is_i+t_i-c_i]=[f_j+t_j]-[x_i][s_j] \]

    那么就是有若干 \((x,y)\to (s_j,f_j)\) 的点,要用直线去切它,求截距最小。

    由于我们的斜率 \(x_i\) 是单调上升的,于是维护一个下凸包即可。

    弹出:不断弹出队头,直到下凸包的最前一条线 斜率 大于 现在切它的 \(k\) 即可。画一下图就知道了,实在不行就比较队头和次队头的 dp 值。

    如果斜率不是单调上升的,用「平衡树」护送凸包。

    普通 DP

    P4229 - 某位歌姬的故事

    https://www.luogu.com.cn/problem/P4229

    先离散化,那么一个区间就变成了一个位置。设 \(f_{i,j}\) 为处理前 \(i\) 个位置,上一个定格的区间为 \(j\) 的方案数。

    参考题解转移。

    P3592 - [POI2015] MYJ

    https://www.luogu.com.cn/problem/P3592

    区间 dp,设 \(f_{l,r,k}\) 为区间 \([l,r]\) 的最小值为 \(k\) 时的答案。

    然后为了方便,做一个 \(k\) 的前缀和,即 \(f_{l,r,k}=\max(f_{l,r,k},f_{l,r,k+1})\)

    那么 \(f_{l,r,k}=\max(f_{l,i-1,k}+f_{i+1,r,k}+val)\)\(val\)\(i\) 取到 \(k\) 时的贡献。

    CF53E - Dead Ends

    https://www.luogu.com.cn/problem/CF53E

    \(f_{S,T}\) 为点集为 \(S\),叶子集为 \(T\)。注意有统计重复的情况,打表得 \(f_{S,T}/=popcount(T)\) 即可。

    期望 DP

    求记住这个式子:

    \[E=\sum\limits_{i=0}^n i\times P[x=i]=\sum\limits_{i=0}^nP[x\ge i] \]

    呜呜。

  • 相关阅读:
    WEB UI 整理
    RAT
    client 控制
    SiMay 远控
    SSH/SOCKS成为全局代理
    BypassAntiVirus
    QuasarRAT 使用
    从 Qt 的 delete 说开来
    Spectrum Analyzer test.cpp Example File
    windows下C/C++的内存泄露检测
  • 原文地址:https://www.cnblogs.com/BlankAo/p/16119236.html
Copyright © 2020-2023  润新知