1 条题解

  • 0
    @ 2025-8-24 22:28:28

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar w33z8kqrqk8zzzx33
    **

    搬运于2025-08-24 22:28:28,当前版本为作者最后更新于2021-02-28 18:12:37,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    良心出题人的良心题 /qq

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

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

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

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

    1. an ka_{n\ k} 为长度为 nn 的排列 (π1,π2,,πn)(\pi_1,\pi_2,\dots,\pi_n) 个数,使得存在恰好 kk 个巅峰并且 π1<π2,πn1>πn\pi_1<\pi_2,\pi_{n-1}>\pi_n
    2. bn kb_{n\ k} 为长度为 nn 的排列 (π1,π2,,πn)(\pi_1,\pi_2,\dots,\pi_n) 个数,使得存在恰好 kk 个巅峰并且 π1<π2,πn1<πn\pi_1<\pi_2,\pi_{n-1}<\pi_n
    3. cn kc_{n\ k} 为长度为 nn 的排列 (π1,π2,,πn)(\pi_1,\pi_2,\dots,\pi_n) 个数,使得存在恰好 kk 个巅峰并且 π1>π2,πn1>πn\pi_1>\pi_2,\pi_{n-1}>\pi_n
    4. dn kd_{n\ k} 为长度为 nn 的排列 (π1,π2,,πn)(\pi_1,\pi_2,\dots,\pi_n) 个数,使得存在恰好 kk 个巅峰并且 π1>π2,πn1<πn\pi_1>\pi_2,\pi_{n-1}<\pi_n

    则:

    1. bn kb_{n\ k}cn kc_{n\ k} 具有一一对应:$(\pi_1,\pi_2,\dots,\pi_n)\Leftrightarrow(\pi_n,\pi_{n-1},...,\pi_1)$。
    2. an ka_{n\ k}dn k1d_{n\ k-1} 具有一一对应:$(\pi_1,\pi_2,\dots,\pi_n)\Leftrightarrow(n+1-\pi_1,n+1-\pi_2,\dots,n+1-\pi_n)$。这是因为每一个巅峰(除了最后一个)都有恰好一个紧接下来的逆巅峰,每一个逆巅峰都有恰好一个紧接下来的巅峰。

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

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

    1. an1 kan ka_{n-1\ k}\rightarrow a_{n\ k}2k2k 方案;不会产生新巅峰当且仅当插入在紧挨着一个旧巅峰,覆盖了旧巅峰。
    2. an1 k1an ka_{n-1\ k-1}\rightarrow a_{n\ k}n112(k1)=n2kn-1-1-2(k-1)=n-2k 方案;需要插入在旧排列 里面 并且不能挨着一个巅峰,这样会新构造一个巅峰。
    3. bn1 k1an kb_{n-1\ k-1}\rightarrow a_{n\ k}11 方案;插入在旧排列 πn2\pi_{n-2}πn1\pi_{n-1} 之间会产生恰好一个巅峰。
    4. cn1 k1an kc_{n-1\ k-1}\rightarrow a_{n\ k}11 方案;插入在旧排列 π1\pi_1π2\pi_2 之间会产生恰好一个巅峰。
    5. bn1 kbn kb_{n-1\ k}\rightarrow b_{n\ k}2k+12k+1 方案;与 11 转移同理,也可以插入在旧排列 πn1\pi_{n-1} 后面。
    6. bn1 k1bn kb_{n-1\ k-1}\rightarrow b_{n\ k}n112(k1)1=n2k1n-1-1-2(k-1)-1=n-2k-1 方案;基本和 22 同理,但是需要减 11 因为不能在旧 πn2,πn1\pi_{n-2},\pi_{n-1} 之间插入。
    7. an1 kbn ka_{n-1\ k}\rightarrow b_{n\ k}11 方案;插入在旧排列 πn1\pi_{n-1} 后面。
    8. dn1 k1bn kd_{n-1\ k-1}\rightarrow b_{n\ k}11 方案;插入在旧排列 π1\pi_1π2\pi_2 之间,同时会产生一个新巅峰。

    于是有递推

    $$\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} $$

    不 感 觉 很 类 似 吗 ?

    fn kf_{n\ k},其中 fn 2k=an kf_{n\ 2k}=a_{n\ k}fn 2k+1=bn kf_{n\ 2k+1}=b_{n\ k},则 an ka_{n\ k}ff 里“上一个”元素是 bn k1b_{n\ k-1}bn kb_{n\ k}ff 里“上一个”元素是 an ka_{n\ k}

    于是有

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

    考虑 fn n1f_{n\ n-1} 代表什么;替换回去得到 f2n 2n1=f2n 2(n1)+1=b2n n1f_{2n\ 2n-1}=f_{2n\ 2(n-1)+1}=b_{2n\ n-1}f2n+1 2n=a2n+1 nf_{2n+1\ 2n}=a_{2n+1\ n}

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

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

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

    考虑定义 fn d=fn ndf'_{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} $$

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

    最优解 /qq

    • 1

    「EZEC-5」「KrOI2021」Chasse Neige 加强版

    信息