这个东西怎么 Rush 啊。。
斜率 DP
如果有 \(a_ib_j\) 这样的东西,就用斜率 DP。
也就是求截距最值,比如 P2120 [ZJOI2007]仓库建设 中有如下 DP:
将 \(y=kx+b\) 化作 \(b=y-kx\),那么有
那么就是有若干 \((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
求记住这个式子:
呜呜。