博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU3306 Another kind of Fibonacci 矩阵
阅读量:5217 次
发布时间:2019-06-14

本文共 1574 字,大约阅读时间需要 5 分钟。

欢迎访问~原文出处——



题意概括

  A0=1,A1=1,AN=X*AN-1+Y*AN-2(N>=2).求SN,SN=A02+A12+…+An2.


题解

  这题是用矩阵做的,一看(sou)就知道。

  设si为前i项的答案。

  如果要求第i项的ai那么是很简单的。

  构建矩阵:

       ai-1       ai

  ai-2   0      y

  ai-1   1      x

  但是好像没用。

  没错,的确没用。

  我们从二次项考虑:

  si  =si-1+ai2

        =si-1+(xai-1+yai-2)2

     =si-1+x2ai-12+y2ai-22+2xyai-1ai-2

  那么对于ak2形式的已经可以完成递推了。但是有一个棘手的东西,就是akak-1怎么完成递推?

  我们继续推导:

  akak-1=(xak-1+yak-2)ak-1

      =xak-12+yak-1ak-2

  我们发现ak-12ak-1ak-2这两个其实可以按照之前推出来的推,而且不影响后面的。

  于是,我们可以构建递推矩阵:

       si     ai2    ai-12    aiai-1

  si-1        1      0        0      0

  ai-12    x2     x2     1      x

  ai-22   x2     y2      0      0

  ai-1ai-2  2xy    2xy     0      y

  

  意义:

  si    = si-1+x2ai-12+y2ai-22+2xyai-1ai-2

  ai2  =        x2ai-12+y2ai-22+2xyai-1ai-2

  ai-12    =           ai-12

  aiai-1   =         xai-12+                yai-1ai-2

  

  那么原始矩阵的第一行就是

  s1  a12   a02   a1a0

  算出sn,就是把这个原始矩阵乘上n-1个递推矩阵。

  


代码

#include 
#include
#include
#include
#include
using namespace std;const int mod=10007,m=4;struct Mat{ int v[m][m]; Mat (){} Mat (int x){ (*this).set(x); } void print(){ for (int i=0;i
>=1; } return ans;}int n,x,y;int main(){ while (~scanf("%d%d%d",&n,&x,&y)){ x%=mod,y%=mod; M.set(0); int newi[m]={2,1,1,1}; int newd[m][m]={ {1 ,0 ,0,0}, {x*x%mod ,x*x%mod ,1,x}, {y*y%mod ,y*y%mod ,0,0}, {2*x*y%mod ,2*x*y%mod ,0,y}}; memcpy(M.v[0],newi,sizeof newi); memcpy(Md.v,newd,sizeof newd); Md=MatPow(Md,n-1); M*=Md; printf("%d\n",M.v[0][0]); } return 0;}

  

转载于:https://www.cnblogs.com/zhouzhendong/p/HDU3306.html

你可能感兴趣的文章
RestTemplate 调用本地服务 connection refused
查看>>
简单粗略的三级字典
查看>>
JITCompiler、NGen.exe及.NET Native
查看>>
.NET方向高级开发人员面试时应该事先考虑的问题
查看>>
NYOJ 75 日期计算
查看>>
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
查看>>
台达PLC modbus 不支持04功能码
查看>>
python学习笔记--装饰器
查看>>
发布一个JavaScript工具类库jutil,欢迎使用,欢迎补充,欢迎挑错!
查看>>
Sandglass
查看>>
discuz 常用脚本格式化数据
查看>>
Luogu P1991 无线通讯网
查看>>
(转载) 好的程序员到底好在哪里?
查看>>
gunplot
查看>>
DSOFRAMER使用小结
查看>>
MS CRM 2011 创建基于Fetch的报表 -- 进阶版
查看>>
HTTPS那些事(二)SSL证书(转载)
查看>>
zabbix 监控zookeeper
查看>>
trace与代码跟踪服务
查看>>
Fire!
查看>>