观察结论 + $dp$ 计数.
通过提示,可以发现一个排列合法,当且仅当它的最长下降子序列长度 $<3$ .
否则,若存在 $\ge 3$ 的下降子序列,中间的元素需要先与左边的交换,再与右边的交换,就存在了冗余的步数,不合法.
而根据 $Dirworth$ 定理,该条件又等价于这个排列能被 $2$ 个上升子序列覆盖.
从前往后依次填入所有数,设 $f(i,j)$ 表示还有 $i$ 个数没填,且这 $i$ 个数中有 $j$ 个数大于已经填入的最大值的方案数.
转移时,枚举填的数是这 $j$ 个数中的第 $k$ 小,若 $k=0$ ,则表示填入的数不在这 $j$ 个数中.
$$
f(i,j)=\sum_{k=0}^j f(i-1,j-k)
$$
容易发现它是个前缀和,
$$
f(i,j)=f(i,j-1)+f(i-1,j)
$$
而 $f(i,i)=0$ ,即不合法,那么可以看出 $f(i,j)$ 的组合意义.
它表示从 $(0,0)$ 出发,每次可以向右方或上方走一步,在中途不触碰直线 $y=x$ ,到达 $(i,j)$ 的方案数.
于是预处理阶乘及其逆元后,可以 $O(1)$ 求 $f(i,j)$ .
还有一个限制是字典序必须大于给出的排列 $p$ ,就像数位 $dp$ 那样做就可以了,时间复杂度 $O(n\log n)$ .
1 |
|