浅谈排列计数 DP
标题起得跟论文似的
因为一碰到关于排列计数就捉瞎于是有了这篇总结
碰到新题会加上去,评论区也可以补充(当然不会有人看我这个蒟蒻的博客就是了。
按照 此文 的方法,大概有 4 种 DP。
| 预定(绝对) | 插入(相对) | |
|---|---|---|
| 按下标 | 从左往右逐一确定值 | 从左往右逐一确定当前值在前缀中的排名 |
| 按值 | 从小到大逐一确定位置 | 从小到大逐一插入排列 |
对于转移,有时候一个一个元素地转移,有时候只考虑关键点,其他元素用组合数的形式一起转移。往往单步转移比断点转移要轻松,因为断点转移需要记录更多的信息,但是通过这些限制可以打破转移顺序的桎梏。—— 一般而言,限制方向与 DP 转移方向一致则可以用预定法(这样可以优化掉一些东西),否则用插入法。
一个一个看。核心思想就是围绕着限制设计状态
从左往右逐一确定值
这种做法的一个弊端就是容易出现重复元素,因此采用状压 DP 的方式表示某个值是否出现过。当然也可以根据题目特殊性质只记录关键值。
例如这道题,容易发现只需要对前缀最大值断点转移,所有的位置没有任何区别。
从小到大逐一确定位置
同上,采用状压 DP 记录某个位置是否被填过,然后进一步优化状态。
从左往右逐一确定当前值在前缀中的排名
可以见 这道经典题,往往需要统计的排列性质与排列元素的具体大小无关,只与其相对大小关系有关。
练手。稍难一点的,额外讨论插入值与 \(x+0.5\) 的相对关系即可,相当于一个二维的 DP。
从小到大逐一插入排列
要求与确切的位置无关,与位置的相对关系有关。
比如这道题,题意很迷,但是观察到一次连边 \((i,i+1)\) 会产生一个贡献当且仅当 \(a_i=0\) 且 \(1\) 与 \(i\) 连通且 \(1\) 是树根。

浙公网安备 33010602011771号