版权属于DP,想要引用此题(包括题面)的朋友请联系博主
分析:
首先我们要明确一个长度为
l
l
的序列有多少种串法
假设我们从位置开始穿入,那么我们只有两种选择:
i+1,i−1
i
+
1
,
i
−
1
如果我们把穿过的珠子都删掉,那么每次我们还是只有两种选择:
i+1,i−1
i
+
1
,
i
−
1
所以一个长度为
l
l
的序列有钟穿法
之后就有显而易见的dp
f[i][j]
f
[
i
]
[
j
]
表示前
i
i
个珠子,分成了段的方案数
看一下DP给出的官方题解:
50%
观察方程
发现是一个卷积的形式——模数也是NTT模数
于是用NTT优化转移,得到
n2logn
n
2
l
o
g
n
的做法
70%
考虑T=1的情况
可以直接用卷积快速幂,加速转移得到结果
时间复杂度为
O(nlog2n)
O
(
n
l
o
g
2
n
)
100%
观察最初的方程:
预处理
∑i−1k=j−1f[k][j−1]∗2n−k−1
∑
k
=
j
−
1
i
−
1
f
[
k
]
[
j
−
1
]
∗
2
n
−
k
−
1
这样就可以
n2
n
2
转移啦
然而
开局一张表,规律全靠找
暴力出奇迹,乱搞压正解
我们打一个优美的表:
以我的找规律能力真的看不出来有什么规律
(勉强找到一个规律:
f[i][j]=(i−1,j−1)这一列的前缀和+(i−1,j)这一列的前缀和
f
[
i
]
[
j
]
=
(
i
−
1
,
j
−
1
)
这
一
列
的
前
缀
和
+
(
i
−
1
,
j
)
这
一
列
的
前
缀
和
)
然而dalao给出结论:
斗胆问了一下澍神,澍神给出了ta的规律:
对角线上的每一个数等于第一项乘
C(i,j)
C
(
i
,
j
)
tip
对于这道题我真的无f*ck说
有了递推式,代码就没什么必要性了