题意:

用1*2的骨牌铺满4*n的矩形总共有多种方法

经典题:可见骨牌铺方格的多种做法

因为宽只有4,考虑先求递推式,假设当前长度为x,有:

①长度为x-1的所有情况后面竖着放2个骨牌,f(x) += f(x-1)

②长度为x-2的所有情况后面横着放4个骨牌或者横着放2个,竖着放2个,而后者又有三种不同放法,f(x) += 4f(x-2)

③长度为x-3的所有情况后面横着放4个,竖着放2个,去掉和②重复的有2种情况,f(x) += 2f(x-3)

④长度为x-4的所有情况后面横着放6个,竖着放2个,去掉和②③重复的有3种情况,f(x) += 3f(x-4)

……(这里建议纸上画一画)

最后可以发现规律得到公式

将f(n)和f(n-1)相加有

这样就可以转成矩阵了

然后就可以愉快的快速幂了

#include<stdio.h>
#include<string.h>
#define mod 1000000007
#define LL long long
LL q[6] = {0,5,2,1,1};
typedef struct
{LL i, j;LL a[6][6];void init(){memset(a, 0, sizeof(a));a[1][4] = a[2][1] = a[2][2] = a[3][1] = a[4][3] = 1;a[1][2] = 5;}void unit(){memset(a, 0, sizeof(a));for(i=1;i<=4;i++)a[i][i] = 1;}
}Matrix;
Matrix Jz;
Matrix Powto(Matrix p, LL k);
Matrix Jjcf(Matrix p1, Matrix p2);
int main(void)
{LL i, n, ans;while(scanf("%lld", &n)!=EOF){if(n==1)printf("1\n");else if(n==2)printf("5\n");else{Jz.init();Jz = Powto(Jz, n-2);ans = 0;for(i=1;i<=4;i++)ans = (ans+q[i]*Jz.a[1][i])%mod;printf("%lld\n", ans);}}return 0;
}Matrix Powto(Matrix p, LL k)
{Matrix E;E.unit();while(k){if(k%2)E = Jjcf(E, p);p = Jjcf(p, p);k /= 2;}return E;
}Matrix Jjcf(Matrix p1, Matrix p2)
{Matrix pe;LL i, j, k;memset(pe.a, 0, sizeof(pe.a));for(i=1;i<=4;i++){for(j=1;j<=4;j++){for(k=1;k<=4;k++)pe.a[i][j] = (pe.a[i][j]+p1.a[i][k]*p2.a[k][j])%mod;}}return pe;
}

HDU 6185 2017广西邀请赛:Covering(矩阵快速幂)相关推荐

  1. HDU 6185 Covering 矩阵快速幂 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...

  2. hdu 5411 CRB and Puzzle(矩阵快速幂)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5411 解题思路: 题目大意: 给定n个点 常数m 下面n行第i行第一个数字表示i点的出边数,后面给出 ...

  3. hdu 6185 Covering 矩阵快速幂

    题意: 用1*2和2*1的两种地毯铺地 问有多少种情况 思路: 直接推转移方程 从An-1的地方只有1种转移方法 从An-2的地方有5种转移方法 n-3转移不到n 但是n-4可以 也是最复杂的 从An ...

  4. 【HDU - 5015 】233 Matrix (矩阵快速幂)

    题干: In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or ...

  5. HDU 6183 2017广西邀请赛:Color it(线段树)

    题目太长了就直接放链接吧 http://acm.hdu.edu.cn/showproblem.php?pid=6183 题意: 一个空的坐标系,有④种操作:①1 x y c表示在(x, y)点染上颜色 ...

  6. HDU 6184 2017广西邀请赛:Counting Stars(三元环)

    题意: n个点m条边的无向图,问有多少个A-structure 其中A-structure满足V=(A,B,C,D) && E=(AB,BC,CD,DA,AC) 可以看出A-struc ...

  7. HDU 6191 2017广西邀请赛:Query on A Tree(字典树启发式合并)

    题意: 有一棵n个节点的树,每个节点都有一个值,m次查询,每次两个数x y表示以x为根的子树中哪个节点权值异或y得出的结果最大,求最大结果 离线 和线段树合并一样,在搜索过程中将多个字典树并在一起 每 ...

  8. HDU 6188 2017广西邀请赛:Duizi and Shunzi

    题意: 有n张牌,每张牌上都有一个不超过n的正整数,你可以选择三张数字连续的牌作为一个顺子,也可以选择两张数字一样的牌作为一个对子,现要让对子和顺子的数量之和尽可能多,求最大数量 先排序 因为对子只消 ...

  9. HDU 6186 2017广西邀请赛:CS Course

    题意: n个数,m次查询,每次给出一个p,求出除了第p个数以外其它所有数的且和,或和,异或和 统计下每个二进制位1的数量,例如z[5] = x表示有x个数第5个二进制位为1 之后每次查询只要check ...

最新文章

  1. 下面关于表单的叙述错误的是_下面是关于表单数据环境的叙述,其中错误的是A.可以在数据环境中加入与表单操作有关的表B.数据环...
  2. 远程办公在美国有多受欢迎?有人宁愿降薪 50% 也不愿再回办公室
  3. 移动端触屏click点击事件延迟问题,以及tap的解决方案
  4. nginx实现防止ddos攻击
  5. 【机器学习基础】数学推导+纯Python实现机器学习算法3:k近邻
  6. php7不兼容phalcon_Phalcon7
  7. Three.js之渲染器
  8. 「软件项目管理」一文了解软件项目团队计划
  9. PyCharm集成Anaconda3环境下安装 腾讯优图报错 ERROR: Could not install packages due to an EnvironmentError
  10. 背景选择器selector替换按钮默认背景
  11. 反编译插件jadclipse和jad.exe的组合使用
  12. MethodInterceptor拦截器
  13. mac 电脑连接不上github_我电脑中的一些常用软件
  14. Linux 端口占用情况查看
  15. 中国科学院微电子学院计算机,周云燕 - 中国科学院大学 - 微电子学院
  16. LCM模组的简介与质量管理(连载四)
  17. word文档怎么批量解除锁定_解除锁定的word文档的方法
  18. Android App混合开发
  19. 关于STM32的jlink仿真器突然不能工作的解决方法
  20. 西瓜综艺走进厦门大同小学 唤醒家庭亲子交流

热门文章

  1. python基础教程廖雪峰云-为什么看不懂廖雪峰的Python学习教程?
  2. python与office结合可以干什么-python与office(一)
  3. 判断是否是质数 c++java
  4. Redis基础学习(2)
  5. vue组件内数值做watch监听,首次监听不到的问题
  6. 限制码率的视频编码标准比较(包括MPEG-2,H.263, MPEG-4,以及 H.264)
  7. php获取pc访问还是手机号_PHP函数判断电脑端浏览器访问访问还是手机端浏览器访问...
  8. jQuery 学习-DOM篇(六):jQuery 替换 DOM 元素
  9. jQuery判断是否为对象或者数组
  10. SpringMVC控制器单例和多例