Emmm很不想写代码的感觉。
CF392C Yet Another Number Sequence
题目描述
Everyone knows what the Fibonacci sequence is. This sequence can be defined by the recurrence relation:
$ F{1}=1,F{2}=2,F{i}=F{i-1}+F{i-2}$ We’ll define a new number sequence $A{i}(k)$ by the formula:
$ A{i}(k)=F{i}×i^{k} (i>=1). $ In this problem, your task is to calculate the following sum: $A{1}(k)+A{2}(k)+…+A_{n}(k)$ . The answer can be very large, so print it modulo 1000000007 $(10^{9}+7)$
Solution
定义$f(n,k) = \sum\limits_{i=1}^{n}A_i(k)$
大致猜一个推导方向是常系数线性递推。
二项式定理展开
交换求和顺序
这一步需要注意一下边界情况,$F_0=1,0^0=1$(这里按照IEEE标准)
矩阵快速幂优化即可,注意一下初始状态
时间复杂度$O(k^3\log n)$
1 |
|
其实还可以用更优的方法。
定义$F,G$分别是斐波那契数列的初始矩阵和转移矩阵。比较特殊$(FG^{i-1}){1,1} = G^{i-1}{1,1}$
$F(2n,k) = \sum\limits{i=1}^{n} + G^{n}{1,1}\sum\limits{i=1}^{n}G^{i}{1,1}(i+n)^k$
恒等变换后等于
时间复杂度是$O(8klogn)$,实现的时候因为$n$不是2的次幂,所以先处理到$2^k$大于$n$即可。
每个转移的复杂度是常数。
很中档的一道题。。