题目传送门

分析:

sb矩阵加速推一辈子。。。

想了1个小时,结果好像还和标准答案的方法不一样诶。。。

标算解法:

老套路,对于新加入的一列,考虑它与目前最后一列的关系

我们可以列出四种方案:

其中前两种我们知道一定使用了一个小块

但是后面两种就不知道是用过还是没用过了,用了就一定用了两个

所以再枚举两个状态0/1,表示用了或没用

然后就有了6个状态。。。

这6个状态可以互相胡乱转移一通,然后就可以得出答案2333

具体怎么转移其实不难,然后说一说自己的口胡写法2333

胡乱解法(自己的):

老套路,考虑新加入一行(假设两个碎块在前面已经用过)

此时考虑竖放和横放就是g ( i - 1 ) + g ( i - 2 )

然后考虑碎块放最后。。。

当确定两个碎块的间距后和相对位置时,摆放方式也就确定了

然后我们假设最后放的是包含碎块的几列,当列数为 j 时,前面的方案数就为Fib( i - j )

那么枚举 j 后的总方案就是SumFib ( i - 3 ) ,因为碎块长度最小为3

所以

g ( i ) = g ( i - 1 ) + g ( i - 2 ) + 2 * SumFib ( i - 3 )

前缀和我们推一下式子得到:

SumFib ( i ) = 2 * SumFib ( i - 1 ) - SumFib ( i - 3 )

然后这里有6个关键值,我们可以用5*5的矩阵维护

字很烂,原谅一下哈哈哈嗝。。。

然后矩阵加速就好了。。。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue> #define maxn 100005
#define MOD 1000000007 using namespace std; inline int getint()
{
int num=,flag=;char c;
while((c=getchar())<''||c>'')if(c=='-')flag=-;
while(c>=''&&c<='')num=num*+c-,c=getchar();
return num*flag;
} struct node{
long long a[][];
friend node operator *(node x,node y)
{
node z;memset(z.a,,sizeof z.a);
for(int i=;i<;i++)for(int j=;j<;j++)for(int k=;k<;k++)
(z.a[i][j]+=x.a[i][k]*y.a[k][j])%=MOD;
return z;
}
}tr,I,A;
int P[][]={{,,,,},{,,,,},{,,,,},{,,,,},{,,MOD-,,}}; inline node ksm(node num,int k)
{
node ret=I;
for(;k;k>>=,num=num*num)if(k&)ret=ret*num;
return ret;
} int main()
{
int T=getint();
for(int i=;i<;i++)I.a[i][i]=;
for(int i=;i<;i++)for(int j=;j<;j++)tr.a[i][j]=P[i][j];
A.a[][]=,A.a[][]=,A.a[][]=;
while(T--)
{
int n=getint()-;
if(n<){printf("0\n");continue;}
node tmp=A*ksm(tr,n);
printf("%lld\n",tmp.a[][]);
}
}

最新文章

  1. Session中load/get方法的详细区别
  2. MD5实现32位加密
  3. webstrom快捷键速查
  4. IE6-8中Date不支持toISOString方法
  5. ios中怎么样设置drawRect方法中绘图的位置
  6. ORA-15005: name &quot;orcl&quot; is already used by an existing alias
  7. wireshark http过程
  8. 源码编译安装LAMP环境及配置基于域名访问的多虚拟主机
  9. leetcode&mdash;Same Tree
  10. python模块基础之OS模块
  11. MySQL Workbench导出数据库
  12. java 获取随机数的三种方法
  13. ANTLR4权威參考手冊(一)
  14. MySQL DNS反查导致连接缓慢
  15. jquery ocupload一键上传文件应用
  16. linux下redis数据库的简单使用
  17. 无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换
  18. C#数组和集合整理
  19. MySql 常见错误代码大全 VV2
  20. 树莓派系统(Debain)中设置SSH服务开机自启动

热门文章

  1. Resharper 去掉注释拼写
  2. STM32与STM8操作寄存器的区别
  3. CodeForces - 1239A
  4. 洛谷$P$4301 $[CQOI2013]$新$Nim$游戏 线性基+博弈论
  5. 浅谈Java的默认和静态方法
  6. Java工程师阅读源码的一些见解
  7. Markdown数学符号
  8. 1060 爱丁顿数 (25 分)C语言
  9. win7技巧
  10. 细说javascript typeof操作符