题解 P7292【「EZEC-5」Chasse Neige 加强版】

· · 题解

良心出题人的良心题 /qq

官方题解怎么基本上跳过转移讲解啊

排列计数通常有两个 DP 方法:

  1. 按照顺序构造 DP,但是这里无法应用(存不了最后元素的值)
  2. 插入极值构造 DP

考虑维护第一值与第二值的关系,以及次后值与最后值关系。

  1. a_{n\ k} 为长度为 n 的排列 (\pi_1,\pi_2,\dots,\pi_n) 个数,使得存在恰好 k 个巅峰并且 \pi_1<\pi_2,\pi_{n-1}>\pi_n
  2. b_{n\ k} 为长度为 n 的排列 (\pi_1,\pi_2,\dots,\pi_n) 个数,使得存在恰好 k 个巅峰并且 \pi_1<\pi_2,\pi_{n-1}<\pi_n
  3. c_{n\ k} 为长度为 n 的排列 (\pi_1,\pi_2,\dots,\pi_n) 个数,使得存在恰好 k 个巅峰并且 \pi_1>\pi_2,\pi_{n-1}>\pi_n
  4. d_{n\ k} 为长度为 n 的排列 (\pi_1,\pi_2,\dots,\pi_n) 个数,使得存在恰好 k 个巅峰并且 \pi_1>\pi_2,\pi_{n-1}<\pi_n

则:

于是我们只需要往 a_{n\ k},b_{n\ k} 转移。

以下格式为 \text{旧排列类型}\rightarrow\text{新排列类型}。注意旧排列最后元素为 \pi_{n-1}。考虑转移,我们转移时插入 n 使巅峰变换更简介:

于是有递推

\begin{cases}a_{n\ k}=2ka_{n-1\ k}+(n-2k)a_{n-1\ k-1}+b_{n-1\ k-1}+c_{n-1\ k-1}\\b_{n\ k}=(2k+1)b_{n-1\ k}+(n-2k-1)b_{n-1\ k-1}+a_{n-1\ k}+d_{n-1\ k-1}\end{cases}

采用以上一一对应:

\begin{cases}a_{n\ k}=2ka_{n-1\ k}+(n-2k)a_{n-1\ k-1}+2b_{n-1\ k-1}\\b_{n\ k}=(2k+1)b_{n-1\ k}+(n-2k-1)b_{n-1\ k-1}+2a_{n-1\ k}\end{cases}

不 感 觉 很 类 似 吗 ?

f_{n\ k},其中 f_{n\ 2k}=a_{n\ k}f_{n\ 2k+1}=b_{n\ k},则 a_{n\ k}f 里“上一个”元素是 b_{n\ k-1}b_{n\ k}f 里“上一个”元素是 a_{n\ k}

于是有

f_{n\ k}=kf_{n-1\ k}+(n-k)f_{n-1\ k-2}+2f_{n-1\ k-1}

考虑 f_{n\ n-1} 代表什么;替换回去得到 f_{2n\ 2n-1}=f_{2n\ 2(n-1)+1}=b_{2n\ n-1}f_{2n+1\ 2n}=a_{2n+1\ n}

套会原始,得到 f_{2n\ 2n-1}=b_{2n\ n-1} 为满足相邻比较是 <><><...>< 的排列,f_{2n+1\ 2n}=a_{2n+1\ n} 位满足 <><><...><> 的排列。

这些是 ”Alternating permuation numbers“,由 Andre 定理,这数列由指数生成函数 [\frac{x^n}{n!}](\tan(x)+\sec(x)) 给出。于是

f_{n\ n-1}=n![x^n](\tan(x)+\sec(x))

考虑定义 f'_{n\ d}=f_{n\ n-d},则:

f'_{n\ d}=(n-d)f_{n-1\ k}+df_{n-1\ k-2}+2f_{n-1\ k-1} f'_{n\ d}=(n-d)f'_{n-1\ d-1}+df'_{n-1\ d+1}+2f'_{n-1\ d} \begin{cases}f'_{n\ 1}=n![x^n](\tan(x)+\sec(x))\\f'_{n-1\ d+1}=\frac{f'_{n\ d}-(n-d)f'_{n-1\ d-1}-2f'_{n-1\ d}}{d}\end{cases}

问题想求 a_{n\ k}=f_{n\ 2k}=f'_{n\ n-2k},递推即可。

最优解 /qq