题目大意:已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5,对于给定的每个n,输出F(0)+ F(1)+ …… + F(n) mod 2009。
题目链接:
http://acm.fzu.edu.cn/problem.php?pid=1683
矩阵加速递推求解的一道经典好题。
首先由
![未命名](http://www.abandonzhang.com/wp-content/uploads/2013/01/未命名1.jpg)
我们可以很快的找到递推转移矩阵:
![未命名1](http://www.abandonzhang.com/wp-content/uploads/2013/01/未命名11.jpg)
PS:上面的图中(F(n-1), F(n-2), F(n-3) ) 应改为 (F(n+1), F(n), F(n-1) )
那么在log(n)的时间内便可求出F(n),但是求sigma(F(n))的话还不能一个一个求。
我们借助
这道题中的第二种线性变换的方法:S(n+1) = S(n) + F(n+1) ,并且把加到之前的转移矩阵中加一维:
![未命名](http://www.abandonzhang.com/wp-content/uploads/2013/01/未命名3.jpg)
这样我们便可以在log(n)时间内求出解了~~
注:理解并记住这种重要的方法!
#include
#include
#include
#include
#include
#include
#include
#include
#include