「CTSC2018」青蕈领主

首先有一个想法,就是建出一颗类似树的结构.

然后\(i\)个子树合并的方案设为\(f[i]\)

实质上,\(f[n]\)就是\(L:1,1,1,...,n\)的方案

\(f[n]=(n-1)f[n-1]+\sum_{i=2}^{n-2}(n-i-1)f[i]f[n-i]\)

这个递推式的含义就是:

考虑从大到小(或从小到大)插入数

假设此时已经有\([2,n+1]\)

分两种情况

\(part1:\)
此时序列满足条件,那么\(1\)只要不和\(2\)挨着就不会有问题,即\(f[n - 1]*(n+1-2)\)
\(part2:\)
此时序列不满足条件,那么我们可以使用\(1\)截断一段不合法的区间.
因为\(1\)只能截断一段,我们枚举这一段的长度\(i\in[2,n-2]\)
然后把\(1\)放进\(i\)个的方案为\(f[i]\)
\(1\)放进去后,这一段就相当"1"去继续截断,即\(f[n-i]\)
考虑给这一段分配权值(实际上等于展开一个点)
一共\(n-j+1\)个点
含有\(2\)的点是不能展开的(1截不断)
最后一个点不用截
然后又因为含有\(2\)的点一定不在最后(因为\(2\)是最小的,所以序列不可能合法)
所以可以展开的点为\(n-j-1\)

这个式子显然可以分治\(NTT\)

posted @ 2020-06-02 20:01  zzy2005  阅读(121)  评论(0编辑  收藏  举报