FFT 【JSOI2012】bzoj4332 分零食 (未解决) 很不错的一道倍增优化dp?? 题目大意: 题目分析:

第一次做这类题挺难想的

题目大意:

有n个小朋友,m块糖。 
给小朋友分糖,如果一个小朋友分不到糖,那他后面的小朋友也分不到糖。 
每个小朋友有一个喜悦值,有三个参数,O,S,U,设一个小朋友分到糖数为x,则这个小朋友的喜悦值为O*x x+ S x +U,分不到糖的小朋友的喜悦值为1。 
求所有分糖方案下 所有小朋友喜悦值乘积 的和。

题目分析:

首先想到 dp 。∑i=1ng[i][m]。 
dp方程

 
g[n][m]=∑i=1mg[n−1][i]×f(m−i)

(枚举第 n 个小朋友分到的糖数)。 
然后发现是个卷积的形式,于是立刻想到 FFT ,立刻想到倍增 (

 
g[n]=g[n−1]∗f

得到

 
g[n]=g[0]∗fn

,而 g[0]=1 所以

 
g[n]=fn

)。但是我们显然要求的是

 
∑i=1ng[i][m]

只是这样倍增显然是不行的。

于是记

 
F[n]=∑i=1ng[i]


则 2 的倍数)。

 
F[n]=∑i=1ng[i]
 
F[n]=F[n2]+∑i=n2+1ng[i]
 
F[n]=F[n2]+∑i=n2+1nfi
 
F[n]=F[n2]+∑i=1n2fi+n2
 
F[n]=F[n2]+fn2∑i=1n2fi
 
F[n]=F[n2]+g[n2]∗F[n2]

完成!

对于 log2n 级别的。 
于是就可以开心的使用倍增完成,取膜可以在求完卷积时膜。

复杂度 )