依据题意。我已经推导出tn的公式。ti=ti.a+ti.b,ti.a=5*t(i-1).a+4*t(i-1).b,ti.b=t(i-1).a+t(i-1).b

然而以下居然不能继续推到sn的公式!!!

这道题考察的就是求随意数列的前n项和,在sn的递推公式不太明显的时候。用矩阵解决。

设矩阵A=。矩阵F0=

" />

那么设矩阵S=(A+A2+A3…. + An)*F0

终于答案就是矩阵S内两个元素之和。

那么怎么求A+A2+A3…. + An

能够继续构造例如以下的分块矩阵,当中 I 是单位矩阵

设R=。则有: R2=,R3=

能够发现右上角即为 I + A + A^2 + ... + A^n,多一个 I 后面给减掉就能够了

能够用高速幂求出R^n;

然而上面的方法对于此题仍然tle,看了标码发现。能通过推导进一步缩小矩阵的阶数,我这里的R是四阶。而标码里的运算仅仅有三阶。

继续思考:

看看能不能直接推导得到S的通项公式。看解说:

T[i] = dp[i][0]+dp[i][1]

=6*dp[i-1][1]+5*dp[i-1][0]

=6*T[i-1]-dp[i-1][0]

=6*T[i-1]-T[i-2]

依据S[i]=S[i-1]+T[i]能够计算出:

S[i]=S[i-1]+ 6*T[i-1]-T[i-2]

则有公式:

  

设R= ,搞定!

总结:矩阵的应用,细致学习上面的构造矩阵和推导过程。第一种构造分块矩阵的方法非常实用,它对sn公式不好直接构造矩阵的时候适用。

但假设像上面S[i]=S[i-1]+ 6*T[i-1]-T[i-2]这种公式能够推导出sn的递推矩阵。能够减少复杂度。

#include<stdio.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const long long mod = 1000000007;
struct Ma
{
long long m[3][3];
};
Ma operator * (Ma a,Ma b)
{
Ma c;
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
{
c.m[i][j] = 0;
for (int k = 0; k < 3; k++)
{
c.m[i][j]+=(a.m[i][k]*b.m[k][j]);
if(c.m[i][j]>=mod||c.m[i][j]<=-mod) c.m[i][j]%=mod;
//c.m[i][j]%=mod;
}
}
return c;
}
Ma mm[65];
long long cal(long long n)
{
int cur=0;
Ma ans= {1,6,-1,
0,6,-1,
0,1,0
};
while(n)
{
if(n&1)
{
ans = ans*mm[cur];
}
cur++;
n>>=1;
}
long long tmp=41*ans.m[0][0]%mod+35*ans.m[0][1]%mod+6*ans.m[0][2]%mod+mod;
tmp%=mod;
while(tmp<0) tmp+=mod;
printf("%lld\n",tmp);
return tmp;
}
//long long ans[10000005];
int main()
{
Ma tmp= {1,6,-1,
0,6,-1,
0,1,0
};
mm[0] = tmp;
for(int i=1; i<64; i++) mm[i]=mm[i-1]*mm[i-1];
long long n;
while(scanf("%lld",&n)!=EOF)
{
if(n==1) puts("6");
else if(n==2) puts("41");
else cal(n-3);
}
return 0;
}

[数学-构造矩阵]NEFU 1113的更多相关文章

  1. BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘

    2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Statu ...

  2. POJ 3233 Matrix Power Series(构造矩阵求等比)

    Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak. ...

  3. Number Sequence(HDU 1005 构造矩阵 )

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  4. hdu 5015 233 Matrix(构造矩阵)

    http://acm.hdu.edu.cn/showproblem.php?pid=5015 由于是个二维的递推式,当时没有想到能够这样构造矩阵.从列上看,当前这一列都是由前一列递推得到.依据这一点来 ...

  5. poj 3735 Training little cats(构造矩阵)

    http://poj.org/problem?id=3735 大致题意: 有n仅仅猫,開始时每仅仅猫有花生0颗,现有一组操作,由以下三个中的k个操作组成: 1. g i 给i仅仅猫一颗花生米 2. e ...

  6. HDU 3306 Another kind of Fibonacci ---构造矩阵***

    Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. 【CodeForces】708 B. Recover the String 数学构造

    [题目]B. Recover the String [题意]找到一个串s,满足其中子序列{0,0}{0,1}{1,0}{1,1}的数量分别满足给定的数a1~a4,或判断不存在.数字<=10^9, ...

  8. 构造矩阵解决这个问题 【nyoj299 Matrix Power Series】

    矩阵的又一个新使用方法,构造矩阵进行高速幂. 比方拿 nyoj299 Matrix Power Series 来说 给出这样一个递推式: S = A + A2 + A3 + - + Ak. 让你求s. ...

  9. UVa 11149 Power of Matrix (矩阵快速幂,倍增法或构造矩阵)

    题意:求A + A^2 + A^3 + ... + A^m. 析:主要是两种方式,第一种是倍增法,把A + A^2 + A^3 + ... + A^m,拆成两部分,一部分是(E + A^(m/2))( ...

随机推荐

  1. vue 关于deep watch / computed 监听不到 vuex state 对象变化的的问题

    简而言之,如果vuex state 中是一个对象 {},那么监听就会有问题.先给出解决方案: // 超简易拷贝(如果是深拷贝还多此一举把get/set拷贝进去了,所以用简易拷贝即可) let __VA ...

  2. django url 中的namespace详解

    [引子] django是一个比较全能的web框架,比如它实现了自己的orm模型来对接不同的数据库.并提供了方便的数据接口:django牛逼的地方 还有许多,如他实现了自己的模板语言,这样我们就能方便的 ...

  3. 在Windows系统上怎么使用SecureCRT链接Linux AWS EC2 -摘自网络

    在Windows系统上就需要使用SecureCRT,Putty等工具,进行连接.但是AWS提供的XXX.pem文件,需要做一些处理SecureCRT的方法: 1.使用XXX.pem文件生成一个公钥文件 ...

  4. Kinect v2 记录

    最多可同时识别跟踪 6 人,每人可识别到 25 个关节数据.可以根据上身 10 个关节数据来判断坐姿状态. 物理极限识别范围:0.5m – 4.5m,最佳识别范围:0.8m – 3.5m. 深度数据可 ...

  5. log4j的正确使用姿势

    最近清明节,朋友公司的日志爆了,说控制台打得太满了,出了问题,早上4点多被喊去公司修改代码,他们把所有的日志全部在控制台打印了,结果就...我说日志这么做不可取啊,你们打印出来的内容太多啦,控制台没必 ...

  6. 【Unity】第5章 3D坐标系和天空盒

    分类:Unity.C#.VS2015 创建日期:2016-04-20 一.简介 这一张主要介绍3D坐标系的基础知识以及各种形状的天空盒. 二.示例 本章的示例都在ch05Demos工程下.

  7. vue.js $refs和$emit 父子组件交互

    父调子 $refs (把父组件的数据传给子组件)  <template> <div id="app"> <input type="butto ...

  8. 菜鸟学数据库(五)——MySQL必备命令

    今天跟大家分享一下MySQL从连接到具体操作的一系列常用命令.可能有的人觉得现在有很多可视化的工具,没必要再学习那些具体的命令了,但是我不这么认为,不可否认那些工具的确让我们的工作更加方便快捷,但是如 ...

  9. C++文件读写 打开方式等比较全

    要求:掌握文本文件读写的方法了解二进制文件的读写方法 C++文件流:fstream // 文件流ifstream // 输入文件流ofstream // 输出文件流 //创建一个文本文件并写入信息// ...

  10. latex基本语法

    一直想着学会latex,但是自学起来太麻烦,总是出现各种不理解的错误,也没那么多时间钻研,就学了忘,忘了再学,这里就先摘录下它的基本命令吧.学好了是一件利器!(虽然不常用,但要尽量学会) LaTex基 ...