SSL 2496 线性递推式 矩阵乘法
来源:互联网 发布:fifaonline3m数据错误 编辑:程序博客网 时间:2024/05/18 22:52
题意:一个N阶线性递推式是这样的式子:
Fi=A0Fi-n+A1Fi-(n-1)+…+An-1Fi-1+An
Fi=A0Fi-n+A1Fi-(n-1)+…+An-1Fi-1+An
也就是说,这个数列的每一项都是由他之前连续N项相加所得。其中还包括一个常数An。 对于一个给定的N阶线性递推式,求出它的第K项是多少。
分析:假设n=3,则对于一个初始矩阵B【f0,f1,f2,a[3]】,我们就构造一个用于递推的矩阵A:
0 0 a0 0
1 0 a1 0
0 1 a2 0
0 0 1 1
容易得知B*A^n=【f[n],f[n+1,f[n+2],a[3]】,那么我们就用矩阵乘法快速幂求出A^n就好啦。
时间复杂度(n^3logk)。
代码:
type arr=array[1..100,1..100] of longint;const p=9973;var n,i,ans:longint; m:int64; a,f:array[1..100] of longint; c,d:arr;procedure cheng(a,b:arr);var i,j,k:longint;begin fillchar(c,sizeof(c),0); for i:=1 to n+1 do for j:=1 to n+1 do for k:=1 to n+1 do c[i,j]:=(c[i,j]+a[i,k]*b[k,j]) mod p;end;procedure ksm(x:int64);begin if x=1 then exit; ksm(x div 2); cheng(c,c); if x mod 2=1 then cheng(c,d);end;begin readln(n,m); for i:=1 to n+1 do read(a[i]); for i:=1 to n do read(f[i]); for i:=1 to n-1 do begin d[i+1,i]:=1; d[i,n]:=a[i]; end; d[n,n]:=a[n]; d[n+1,n]:=1; d[n+1,n+1]:=1; c:=d; ksm(m); for i:=1 to n do ans:=(ans+c[i,1]*f[i]) mod p; ans:=(ans+a[n+1]*c[n+1,1]) mod p; writeln(ans);end.
0 0
- SSL 2496 线性递推式 矩阵乘法
- 矩阵乘法与线性递推式
- 矩阵快速幂求斐波那契通项(矩阵乘法优化线性递推式)
- 矩阵乘法求线性递推式的第n项
- 线性递推关系与矩阵乘法
- BZOJ 1409 Password 矩阵乘法+线性筛
- 【bzoj1409】Password 线性筛法+矩阵乘法
- BZOJ 1409: Password 线性筛+矩阵乘法
- bzoj 1409: Password 矩阵乘法+线性筛
- SSL 1529 斐波那契数列Ⅱ 矩阵乘法
- SSL 1530 斐波那契数列Ⅲ 矩阵乘法
- SSL 1531 斐波那契数列Ⅳ 矩阵乘法
- SSL 2511/bzoj 1898 沼泽鳄鱼 矩阵乘法
- SSL 2511/bzoj 1898 沼泽鳄鱼 矩阵乘法
- POJ - 2118 矩阵乘法来解线性递推
- 矩阵乘法求解线性递推(一)
- 矩阵乘法求解线性递推(二)
- 矩阵乘法
- android的照相图片压缩
- Codeforces 651E Table Compression【并查集】
- iOS开发中 NSRunloop 与NSTimer的问题
- Kalman滤波器
- QML中计时器的使用,实现一个简单的倒计时程序
- SSL 2496 线性递推式 矩阵乘法
- Eclipse注释快捷键
- mysql数据库千万级别数据的查询优化和分页测试
- UVa 1363 约瑟夫的数论问题
- js获取cookie值
- cocos2d-x使用地图编辑器的类(cocos2d-x学习)
- 浅谈几款原型设计工具
- 唯有如此,才能更强
- 8大排序算法详解