第一次做这类题挺难想的

题目大意:

有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 级别的。 
于是就可以开心的使用倍增完成,取膜可以在求完卷积时膜。

复杂度 )

相关文章:

  • 2021-09-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-02
  • 2021-08-07
  • 2022-12-23
  • 2022-01-10
猜你喜欢
  • 2021-09-30
  • 2021-11-17
  • 2022-03-01
  • 2022-01-22
  • 2021-10-04
  • 2021-07-13
  • 2022-01-16
相关资源
相似解决方案