[数学-构造矩阵]NEFU 1113
然而以下居然不能继续推到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的更多相关文章
- BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘
2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Statu ...
- 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. ...
- Number Sequence(HDU 1005 构造矩阵 )
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu 5015 233 Matrix(构造矩阵)
http://acm.hdu.edu.cn/showproblem.php?pid=5015 由于是个二维的递推式,当时没有想到能够这样构造矩阵.从列上看,当前这一列都是由前一列递推得到.依据这一点来 ...
- poj 3735 Training little cats(构造矩阵)
http://poj.org/problem?id=3735 大致题意: 有n仅仅猫,開始时每仅仅猫有花生0颗,现有一组操作,由以下三个中的k个操作组成: 1. g i 给i仅仅猫一颗花生米 2. e ...
- HDU 3306 Another kind of Fibonacci ---构造矩阵***
Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- 【CodeForces】708 B. Recover the String 数学构造
[题目]B. Recover the String [题意]找到一个串s,满足其中子序列{0,0}{0,1}{1,0}{1,1}的数量分别满足给定的数a1~a4,或判断不存在.数字<=10^9, ...
- 构造矩阵解决这个问题 【nyoj299 Matrix Power Series】
矩阵的又一个新使用方法,构造矩阵进行高速幂. 比方拿 nyoj299 Matrix Power Series 来说 给出这样一个递推式: S = A + A2 + A3 + - + Ak. 让你求s. ...
- UVa 11149 Power of Matrix (矩阵快速幂,倍增法或构造矩阵)
题意:求A + A^2 + A^3 + ... + A^m. 析:主要是两种方式,第一种是倍增法,把A + A^2 + A^3 + ... + A^m,拆成两部分,一部分是(E + A^(m/2))( ...
随机推荐
- Excel Open Xml中CellStyleXfs,cellStyle,cellXfs之间关系的总结
最近这几个东东打交道了几天,总算是弄明白了,综合多个帖子,现在总结如下: 在创建stylesheet时,必须创建fonts,Fills,Borders 和cellXfs(CellFormats)四个节 ...
- wifiphisher 钓鱼工具的使用
wifiphisher 钓鱼工具的使用一.简介 Wifiphisher是一个安全工具,具有安装快速.自动化搭建的优点,利用它搭建起来的网络钓鱼攻击WiFi可以轻松获得密码和其他凭证.与其它(网络钓鱼) ...
- 【剑道】日常练习相关Q&A 整理
Q:如何使手腕灵活,手指灵活.有力量? A: 1)提重物.将手腕搁在膝盖上,凭手指和手腕的力量将重物提上来 2)指卧撑.用十个指头着地的方法做俯卧撑 Q:怎样才算肩膀放松,如何方式? A:收放自如,多 ...
- java debugger
当你想找方法被哪个地方调用了,可以打断点看debugger方法栈 idea Debugger
- Java操作XML的JAXB工具
在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上 ...
- 为你的网站加上SSL,可以使用HTTPS进行访问
首先,我们使用的是nginx 将域名证书文件1_www.domain.com_bundle.crt .私钥文件2_www.domain.com.key保存到同一个目录,例如/usr/local/ngi ...
- [na]交换机接口文档
文档中有一些数据包等附件,pdf不能看,去这里.http://note.youdao.com/share/?id=5319680eb0c8b9c3f8fefd157534fd90&type=n ...
- Umeng社会化组件使用笔记
1.申请umeng账号 2.下载umeng sdk,并且阅读友盟开放文档 3.申请各开放平台的账号,获取appid .appkey.appsecret:注意,这里需要配置安全域名sns.whalecl ...
- jar依赖
https://blog.csdn.net/honghailiang888/article/details/53019635
- github pull request
https://stackoverflow.com/questions/14680711/how-to-do-a-github-pull-request https://help.github.com ...