题目大意
求以下的式子:
其中N很大,M<=30
Solution
首先列出dp方程
设 F(n,m)=∑ni=1F(n?i,m?1)×sin(i×x)
这是暴力,然后我们尝试将 sin(i×x) 变成其他东西
预备知识
二倍角公式:
cos(2α)=cos2(α)?sin2(α)=2cos2(α)?1
sin(2α)=2cos(α)sin(α)
和差化积:
cos(α+β)=cos(α)cos(β)?sin(α)sin(β)
sin(α+β)=sin(α)cos(β)+sin(β)cos(α)
根据三角函数定义:
sin2(α)+cos2(α)=1
推导
sin(i×x)={
sin((k?1)x+x)=cos(x)sin((k?1)x)+sin(x)cos((k?1)x)sin((k?2)x+2x)=cos(2x)sin((k?2)x)+sin(2x)cos((k?2)x)
2sin(k×x)=sin((k?1)x+x)+sin((k?2)x+2x)=cos(x)sin((k?1)x)+sin(x)cos((k?1)x)+cos(2x)sin((k?2)x)+sin(2x)cos((k?2)x)=cos(x)sin((k?1)x)+sin(x)cos((k?1)x)+2cos2(x)sin((k?2)x)?sin((k?2)x)+2cos(x)sin(x)cos((k?2)x)=cos(x)[sin((k?2)x)cos(x)+sin(x)cos((k?2)x)]+sin(x)cos((k?1)x)+2cos2(x)sin((k?2)x)?sin((k?2)x)+2cos(x)sin(x)cos((k?2)x)=3cos2(x)sin((k?2)x)+3cos(x)sin(x)cos((k?2)x)+sin(x)[cos((k?2)x)cos(x)?sin((k?2)x)sin(x)]?sin((k?2)x)=3cos2(x)sin((k?2)x)+4cos(x)sin(x)cos((k?2)x)?sin((k?2)x)?sin2(x)sin((k?2)x)=4cos2(x)sin((k?2)x)+4cos(x)sin(x)cos((k?2)x)?2sin((k?2)x)=4cos(x)[cos(x)sin((k?2)x)+sin(x)cos((k?2)x)]?2sin((k?2)x)=4cos(x)sin((k?1)x)?2sin((k?2)x)即:2sin(k×x)=4cos(x)sin((k?1)x)?2sin((k?2)x)sin(k×x)=2cos(x)sin((k?1)x)?sin((k?2)x)∴F(n,m)=∑ni=1F(n?i,m?1)×sin(i×x)=∑ni=2F(n?i,m?1)×sin(i×x)+F(n?1,m?1)×sin(x)=∑ni=2F(n?i,m?1)×2cos(x)×sin((i?1)x)?∑i=2F(n?i,m?1)×sin((i?2)x)+F(n?1,m?1)×sin(x)=2cos(x)×∑ni=2F(n?i,m?1)×sin((i?1)x)?∑i=2F(n?i,m?1)×sin((i?2)x)+F(n?1,m?1)×sin(x)=F(n?1,m)×2cos(x)?F(n?2,m)+F(n?1,m?1)×sin(x)
矩阵乘法
于是我们发现F(n,m)只与F(n-1,m),F(n-2,m),F(n-1,m-1)有关,于是我们可以用一个2m*2m的矩阵来做快速幂,最终就可以得出结果了。
。。。推到脑抽