P3933贝壳串
问题描述
海边市场有长度分别为1到n的贝壳串出售,其中长度为i的贝壳串有a[i]种,每种贝壳串有无限个,问用这些贝壳串链接成长度为n的串有多少种方案?
输入格式
第一行,一整数n,
第二行,n个整数ai表示长度为i的贝壳串的种类数
(n<=10^5,0<=ai<=10^7)
输出格式
输出方案数,结果模313
样例输入 1
3
1 3 7
样例输出 1
14
样例输入 2
4
2 2 2 2
样例输出 2
54
dp方程比较显然,令$F[i]$表示组成长度为i的串的方案数,那么$F[i]=\sum_{k=0}^{i}A[k]\times F[i-k]$
直接递推是$n^2$的,但是我们注意到这个转移式子是一个卷积,那么可以用$FFT$来加速,但直接$FFT$显然非常不优秀,需要用到$CDQ$来解决。
假设要算$F[l]-F[r]$的dp值,那么可以先处理出$F[l]-F[mid]$的dp值,然后做一个卷积算出$F[l]-F[mid]$对$F[mid+1]-F[r]$的贡献,这里用$FFT$处理,然后递归计算$F[mid+1]-F[r]$的dp值。
由于每次做$FFT$的长度是和区间长度相关的,因此总时间复杂度$O(n\log ^2n)$
代码:
1 |
|