DP 杂题选做

部分详见:
概率期望 DP 学习笔记
树形 DP 学习笔记

其余题就不具体分类了。

P1220 关路灯

题解说这是区间 DP 经典题,但我以前居然没听说过,这下尴尬了。
\(f_{i,j,0/1}\) 表示关掉区间 \([i,j]\) 所有灯,人在点 \(i/j\) 消耗的最少功率。
那么

\[f_{i,j,0}=\min(f_{i+1,j,0}+dis_{i,i+1}\times (sum-s_{i+1,j}),f_{i+1,j,1}+dis_{i,j}\times (sum-s_{i+1,j})) \]

\[f_{i,j,1}=\min(f_{i,j-1,1}+dis_{j-1,j}\times (sum-s_{i,j-1}),f_{i,j-1,0}+dis_{i,j}\times (sum-s_{i,j-1})) \]

P2466 [SDOI2008] Sue 的小球

做完上面那题这题就很好办了。
这题满足关系式 \(y=s_0-vt\),把功率换成速度,那这题就是求最小的价值乘移动距离的值。
于是就做完了(?

P2501 [HAOI2006]数字序列

第一问正难则反。考虑 \(i,j\) 均被保留,则需满足 \(j-i\ge a_j-a_i\)。移项,得 \(j-a_j\ge i-a_i\)。设 \(b_i=a_i-i\),那么 \(b_i\le b_j(i<j)\)
即最长不下降子序列。
第二问根据贪心调整,必然可以使要调整的区间 \([l,r]\) 最后左边一部分与 \(b_{l-1}\) 连续,右边一部分与 \(b_{r+1}\) 连续。
感性证明一下:对于一个夹在两边之间的区间,设需要向上调整的点数为 \(cntup\),向下的为 \(cntdw\)。那么如果 \(cntup>cntdw\),把它向左边对齐显然是更优的;否则向右边对齐一定不劣。
保证数据随机,那么枚举每个 \(f_i=f_j+1\) 的点 \(j\) (要判合法),并从 \(j\)\(i\) 枚举 \(k\),那它的复杂度不知道O(能过)?

插播一条:

\(O(n \log n)\) 求最长不下降子序列

为啥我不会这个啊(雾
维护数组 \(d_i\) 表示满足 \(f_x=i\)\(b_i\) 最小的 \(x\)
新加入一个 \(x\) 时,若 \(b_x>=b_{d_cnt}\),直接把 \(x\) 插到 \(d\) 最后面。
否则根据 \(d\) 数组的单调性,二分找到第一个 \(b_{d_i}>b_x\)\(x\) 放到 \(i\) 的位置上。
哦好像 \(d\) 数组直接存值比存下标简单。算了不管了(

P5289 [十二省联考 2019] 皮配

什么神仙题啊。虽然好像确实只考了背包。 啥时候会了啥时候填坑吧/youl

P4363 [九省联考 2018] 一双木棋 chess

轮廓线 DP。设轮廓线上横线为 \(1\),竖线为 \(0\)。那么一个状态就可以用长度为 \(2n\) 的二进制数表示。
至于转移,记搜时记录当前操作者并倒着转移即可。为啥一个 dfs 调 1.5h 啊。啥时候能学会 dfs 啊/kk

P4516 [JSOI2018] 潜入行动

无比熟悉。
终究没逃过写这个代码的命运。
注意循环的上下界,否则复杂度很容易写假。

P2605 [ZJOI2010]基站选址

线段树优化 dp。水黑好评ww
朴素 dp 设 \(f_{i,j}\) 表示前 \(i\) 个村庄,建了 \(j\) 个通讯站时 \([1,i]\) 的最少费用。显然可以把第二维滚掉,变成 \(f_i=\min\{f_j+s_{j+1,i-1}\}+c_i\)
然后考虑点对答案的贡献,设 \(L_i,R_i\) 表示能覆盖点 \(i\) 最左/最右的位置。那么当循环到 \(R_i\) 时,\(i\)\([1,L[i])\) 均有 \(w_i\) 的贡献。
那么用线段树维护 \(\min\{f_j+s_{j+1,i-1}\}\),支持区间加法。每次循环到下个 \(k\) 时,重构整棵线段树。

CF908G New Year and Original Order

盲猜一波一会讲题会匹配到这题(
upd: 真的匹配到了
直接暴力数位 dp 的复杂度是 \(O(700^3\times 10)\),显然过不去。
因为把数按照每个数位排序,那么任何一个排序后的数可以表示成一堆 \(11...111\) 相加的形式。
比如把 \(124\) 拆开就是 \(111+11+1+1\)
观察到数 \(i\) 对答案的贡献只与 有几个数大于等于 i 有关。
故设 \(f_{i,j,0/1}\) 表示填了前 \(i\) 位,有 \(j\) 个数大于等于当前的 \(x\),最高位是否有限制。
从 1 到 9 枚举 \(x\) 分别数位 dp 统计贡献即可。

posted @ 2022-12-14 16:04  樱雪喵  阅读(80)  评论(1编辑  收藏  举报