【XSY4765】axelavir(DP)

称序列 \(\langle a_1,\cdots,a_n\rangle\) 是避免 120 的,当且仅当不存在 \(1\leq k<j<i\leq n\),满足 \(a_i<a_k<a_j\)

假设 \(a_1,\cdots,a_{i-1}\) 已经确定了,现在要确定 \(a_i\)。那么为使 \(a\) 避免 120,只需满足 \(a_i\geq \max\limits_{k<j<i,a_k<a_j}a_k\) 即可,将满足 \(k<j\land a_k<a_j\) 的记作 \((k,j)\) 组合。

\(h_{n,X}\) 表示长度为 \(n\) 的非负整数序列 \(\langle a_1,\cdots,a_n\rangle\) 的个数,满足:

  1. \(a_1\geq 1\)
  2. \(a\) 是避免 120 的。
  3. \(A_i\) 表示满足 \(1\leq j\leq i\)\(a_{j-1}<a_{j}\)\(j\) 的个数(将 \(a_0\) 看作一个负数),那么 \(a_i\leq X+A_{i-1}+1\)

那么原题目的答案等于 \(\sum\limits_{m=1}^N h_{N-m,0}\),其中 \(m\) 枚举的是从 \(a_1\) 开始的极长的一段连续的 \(0\)\(a_1,\cdots,a_m\)

考虑怎么求 \(h_{n,X}\)。先枚举 \(a_1\in [1,X+1]\),再枚举从 \(a_1\) 开始的极长的一段小于等于 \(a_1\) 的数:\(a_1,\cdots,a_m\)

注意到 \((1,m+1)\) 这个组合给 \(i>m+1\)\(a_i\) 带来 \(\geq a_1\) 的限制。进一步地,可以发现对于 \(j\leq m\)\((j,k)\) 组合,它们对 \(i>m+1\)\(a_{i}\) 的限制恰是 \(\geq a_1\)

这相当于 \(a_{m+1},\cdots,a_n\) 集体减去 \(a_1\) 后都非负,但注意 \(a_{m+1}\) 还需是正的。

然后还要枚举 \(\langle a_1,\cdots,a_m\rangle\) 中的上升连续对的个数 \(t\),以确定 \(A_{m}\)

那么容易得到:

\[h_{n,X}=\sum_{a_1=1}^{X+1}\sum_{m=1}^n\sum_{t=1}^{m}g_{m,a_1,t}\cdot h_{n-m,X+t-a_1} \]

其中:

\(g_{n,x,t}\) 表示长度为 \(n\) 的非负整数数列 \(\langle a_1,\cdots,a_n\rangle\) 的个数,满足:

  1. \(a_1=x\),且对于任意 \(1<i\leq n\)\(a_i\leq a_1\)
  2. \(a\) 是避免 120 的。
  3. 恰好存在 \(t\) 个位置 \(i\)\(1\leq i\leq n\),将 \(a_0\) 看作一个负数),使得 \(a_{i-1}<a_{i}\)

考虑怎么求 \(g_{n,x,t}\)。考虑枚举 \(a_2=y\)

\(y=x\),那么直接从 \(g_{n-1,x,t}\) 转移过来即可;

\(y<x\)。同样地枚举从 \(a_2=y\) 开始的极长的一段小于等于 \(a_2\) 的数 \(a_2,\cdots,a_m\)。类似地,对于 \(j\leq m\)\((j,k)\) 组合,它们对 \(i>m+1\) 的限制恰是 \(\geq y\)

从而有:

\[g_{n,x,t}=g_{n-1,x,t}+\sum_{y=0}^{x-1}\sum_{m=1}^{n-1}\sum_{c=1}^{m}g_{m,y,c}\cdot f_{n-m-1,x-y,t-c} \]

其中:

\(f_{n,L,t}\) 表示长度为 \(n\)、值域在 \([0,L]\) 的整数数列 \(\langle a_1,\cdots,a_n\rangle\) 的个数,满足:

  1. \(a_1>0\)
  2. \(a\) 是避免 120 的。
  3. 恰好存在 \(t\) 个位置 \(i\)\(1\leq i\leq n\),将 \(a_0\) 看作一个负数),使得 \(a_{i-1}<a_{i}\)

考虑怎么求 \(f_{n,L,t}\)。先枚举 \(a_1\in[1,L]\)。类似地枚举极长的一段小于等于 \(a_1\) 的数 \(a_1,\cdots,a_m\)。类似地,对于 \(j\leq m\)\((j,k)\) 组合,它们对 \(i>m+1\) 的限制恰是 \(\geq a_1\)

那么:

\[f_{n,L,t}=\sum_{a_1=1}^{L}\sum_{m=1}^{n}\sum_{c=1}^{m}g_{m,a_1,c}\cdot f_{n-m,L-a_1,t-c} \]

下图可能可以帮助你更好地理解上述过程:

在这里插入图片描述

现在,我们已经可以在 \(O(N^6)\) 的时间复杂度内解决原问题。一个常数优化的小技巧是,注意到 \(h,g,f\) 最后一维记录上升连续对的个数,而这个个数其实在严格的限制下并不多,大概只有序列长度的一半,这样可以省掉很多常数。

事实上,可以注意到所有转移方程都是卷积的形式。我们先考虑用生成函数来表示 \(f\)\(g\)

先把 \(g\) 的转移方程改写如下:

\[\begin{aligned} g_{n,x,t}&=g_{n-1,x,t}+\sum_{y=0}^{x-1}\sum_{m=1}^{n-1}\sum_{c=1}^{m}g_{m,y,c}\cdot f_{n-m-1,x-y,t-c}\\ &=\sum_{y=0}^{x}\sum_{m=1}^{n-1}\sum_{c=1}^{m}g_{m,y,c}\cdot f_{n-m-1,x-y,t-c}\\ \end{aligned} \]

这方便于我们列方程。

\(F(x,y,z)\)\(G(x,y,z)\) 分别为 \(f,g\) 的生成函数。那么有:

\[\begin{cases} G=xGF+\frac{xz}{1-y}\\ F=F(G-\frac{xz}{1-x})+\frac{1}{1-y} \end{cases} \]

可能可以半在线卷积。或者可以直接解得:

\[G=\frac{1-y-\sqrt{4(1-x)x(1-y)(x(1-z)-1)+(1-y-x(x-y)(1-z))^2}+x^2(1-z)-x(2-y)(1-z)}{2(1-x)(1-y)} \]

使用三元 GF 应该可以做到 \(O(n^3\operatorname{polylog}(n))\)

\(H\) 应该也能用类似半在线卷积的方法加速至 \(O(n^3\operatorname{polylog}(n))\)

posted @ 2022-10-31 07:48  ez_lcw  阅读(17)  评论(0编辑  收藏  举报