【P5999】求排列 pp 的数量,满足 pip_i 两边的数同时小于或大于 pip_i,且 p1=Sp_1=S, pN=Tp_N=T。

f(n,m)f(n,m):前 nn 小的值分成 mm 段的方案数。

从小到大加入每一个数,考虑现在枚举到 nn,若 n≠Sn \neq S 且 n≠Tn\neq T,则可以分三种情况讨论:

  1. 新开一段
    • 若 n≠Sn \neq S 且 n≠Tn\neq T,以后 nn 两侧的都比它大,与题意相符,转移 f(n,m)←(m−[n>S]−[n>T])f(n−1,m−1)f(n,m) \gets (m-[n>S]-[n>T]) f(n-1,m-1)。
    • 若 n=Sn = S 或 n=Tn = T,与题意相符,转移 f(n,m)←f(n−1,m−1)f(n,m) \gets f(n-1,m-1)。
  2. 接在某一段头 / 尾
    • 若 n≠Sn \neq S 且 n≠Tn\neq T,以后一定有一个 >n>n 的数接在 nn 另一侧,nn 两侧就有一个大于的和一个小于的,与题意不符。
    • 若 n=Sn = S 或 n=Tn = T,与题意相符,转移 f(n,m)←f(n−1,m)f(n,m) \gets f(n-1,m)。
  3. 将两段连起来
    • 若 n≠Sn \neq S 且 n≠Tn\neq T,此时 nn 两侧的都比它小,与题意相符,转移 f(n,m)←mf(n−1,m+1)f(n,m) \gets m f(n-1,m+1)。
    • 若 n=Sn = S 或 n=Tn = T,与题意不符。

答案为 f(N,1)f(N,1)。