题意

有一个4xN的土地,用2x1 和1x2两种去无重叠覆盖,问最多有多少种方案。

思路

最开始我以为是奇数和偶数分别讨论,推出来的公式是(偶数) f[i] = f[2]^(i/2); (奇数)f[i] = 5 * f[i-1],推出来不久我就意识到好像貌似是错的。然后暴力把前面的答案找到 1 5 11 36 95 ...,再者第一次推的时候也有部分是对的,所以容易得到一个线性方程
f[i] = f[i-1] +5*f[i-2]+f[i-3] -f[i-4];
第二个问题是数据很大,套了一个矩阵快速幂的模板。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const long long MOD = 1e9 + 7;
LL aaa[30] =
{1, 5, 1, -1, 0,1, 0, 0, 0, 0,0, 1, 0, 0, 0,0, 0, 1, 0, 0,0, 0, 0, 1, 0
};
struct matrix
{LL a[5][5];
};matrix mat_mul(matrix x, matrix y)
{matrix res;memset(res.a, 0, sizeof(res.a));for(int i = 0; i < 5; i++)for(int j = 0; j < 5; j++)for(int k = 0; k < 5; k++){res.a[i][j] += x.a[i][k] * y.a[k][j] ;res.a[i][j] =(res.a[i][j] %MOD + MOD) % MOD;}return res;
}matrix mat_pow(LL n)
{matrix c, res;  //  res = c ^ nint ind = 0;for(int i = 0; i < 5; i++)for(int j = 0; j < 5; j++)c.a[i][j] = aaa[ind++];memset(res.a, 0, sizeof(res.a));for(int i = 0; i < 5; i++)res.a[i][i] = 1;while(n){if(n & 1)res = mat_mul(res, c);c = mat_mul(c, c);n = n >> 1;}return res;
}
LL cc[6] = {1, 5, 11, 36, 95};
matrix ff ;
int main()
{for(int i = 0; i < 5; i ++)ff.a[4 - i][0] = cc[i];long long n;while(cin >> n){if(n > 5){matrix num = mat_pow(n - 5);matrix mum = mat_mul(num, ff);cout << mum.a[0][0] << endl;}elsecout << cc[n - 1] << endl;}return 0;
}

转载于:https://www.cnblogs.com/cifiyoo/p/9491722.html

# HDU - 6185 Covering相关推荐

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

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

  2. hdu 6185 Covering 矩阵快速幂

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

  3. HDU - 6185 Covering(暴搜+递推+矩阵快速幂/杜教BM)

    题目链接:点击查看 题目大意:规定宽度为4,给定长度为n,求用1*2和2*1的瓷砖,将其完全铺满能有多少种方法. 分析:自从学会了矩阵快速幂之后,看到1e18的数据量都会下意识的往递推上面想,但是以前 ...

  4. D - Covering HDU - 6185(未解决完)

    D - Covering HDU - 6185 题意: 4 * n的地板,有无数个1 * 2 和2 * 1 的砖块,问有多少方式填满? 1≤n≤10^18 题解: 矩阵快速幂 代码:

  5. 【HDU - 6185】Covering(矩阵快速幂优化二维dp,高斯消元,轮廓线dp打表)

    题干: Bob's school has a big playground, boys and girls always play games here after school. To protec ...

  6. HDU 6185 2017广西邀请赛:Covering(矩阵快速幂)

    题意: 用1*2的骨牌铺满4*n的矩形总共有多种方法 经典题:可见骨牌铺方格的多种做法 因为宽只有4,考虑先求递推式,假设当前长度为x,有: ①长度为x-1的所有情况后面竖着放2个骨牌,f(x) += ...

  7. Jozky 刷题目录

    文章目录 本目录参考OI-Wiki 还未解决专区 算法基础 枚举 模拟 递归&分治 贪心 排序 前缀和&差分 二分 倍增 构造 搜索 DFS && BFS 双向搜索 启 ...

  8. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

  9. hdu 4389 囧,打表

    http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...

最新文章

  1. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
  2. 图形处理(十二)拉普拉斯网格优化、最小二乘网格模型光顺
  3. datagrid如何获取一行数据中的某个字段值_redis 所支持的数据类型以及其应用场景...
  4. avl删除根节点图解_图解 6 种树,你心中有数吗。。。
  5. (HDU4324)判断一个图中是否存在两点的出度相同
  6. Centos7下python2.x 和python3.x共存
  7. win 7开机要点用户名的解决方法
  8. Red Hat Linux 5.4 开启xdm远程访问
  9. 系统类加载器 AppClassLoader
  10. qt服务器获取formdata文件,QT上传(PUT)文件
  11. 学习Spring Data JPA
  12. mysql mysqlslap压力测试用例
  13. 在Ubuntu 14.04安装和使用Docker
  14. 边缘检测算法_机器视觉怎样检测产品边缘
  15. thinkphp 前台html调用函数 格式化输出
  16. rm -f .... 恢复
  17. 如何在 Ubuntu 16.10 的 Unity 8 上运行老式 Xorg 程序
  18. sql server 替换字符串中的某些字符
  19. 集成学习01_xgboost参数讲解与实战
  20. 微信小程序“淘淘猜成语”开发教程(该成语接龙已上线,功能齐全)

热门文章

  1. linux中fork()函数与vfork()函数的区别
  2. 字符串处理分割字符串
  3. 杂项相关工具的使用方法(边刷题边更新...)
  4. SpringBoot代码复用——thymeleaf提取导航栏并插入或替换元素
  5. 外中断---汇编学习笔记
  6. RIP学习---网络工程
  7. jvm垃圾收集器的发展史及回收算法
  8. SpringBoot自定义MessageConverter
  9. 动态规划和贪心算法的区别
  10. 操作系统(三十二)内存的基础常识