# HDU - 6185 Covering
题意
有一个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相关推荐
- HDU 6185 Covering 矩阵快速幂 递推
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...
- hdu 6185 Covering 矩阵快速幂
题意: 用1*2和2*1的两种地毯铺地 问有多少种情况 思路: 直接推转移方程 从An-1的地方只有1种转移方法 从An-2的地方有5种转移方法 n-3转移不到n 但是n-4可以 也是最复杂的 从An ...
- HDU - 6185 Covering(暴搜+递推+矩阵快速幂/杜教BM)
题目链接:点击查看 题目大意:规定宽度为4,给定长度为n,求用1*2和2*1的瓷砖,将其完全铺满能有多少种方法. 分析:自从学会了矩阵快速幂之后,看到1e18的数据量都会下意识的往递推上面想,但是以前 ...
- D - Covering HDU - 6185(未解决完)
D - Covering HDU - 6185 题意: 4 * n的地板,有无数个1 * 2 和2 * 1 的砖块,问有多少方式填满? 1≤n≤10^18 题解: 矩阵快速幂 代码:
- 【HDU - 6185】Covering(矩阵快速幂优化二维dp,高斯消元,轮廓线dp打表)
题干: Bob's school has a big playground, boys and girls always play games here after school. To protec ...
- HDU 6185 2017广西邀请赛:Covering(矩阵快速幂)
题意: 用1*2的骨牌铺满4*n的矩形总共有多种方法 经典题:可见骨牌铺方格的多种做法 因为宽只有4,考虑先求递推式,假设当前长度为x,有: ①长度为x-1的所有情况后面竖着放2个骨牌,f(x) += ...
- Jozky 刷题目录
文章目录 本目录参考OI-Wiki 还未解决专区 算法基础 枚举 模拟 递归&分治 贪心 排序 前缀和&差分 二分 倍增 构造 搜索 DFS && BFS 双向搜索 启 ...
- HDU 4389 - X mod f(x)
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...
- hdu 4389 囧,打表
http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...
最新文章
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
- 图形处理(十二)拉普拉斯网格优化、最小二乘网格模型光顺
- datagrid如何获取一行数据中的某个字段值_redis 所支持的数据类型以及其应用场景...
- avl删除根节点图解_图解 6 种树,你心中有数吗。。。
- (HDU4324)判断一个图中是否存在两点的出度相同
- Centos7下python2.x 和python3.x共存
- win 7开机要点用户名的解决方法
- Red Hat Linux 5.4 开启xdm远程访问
- 系统类加载器 AppClassLoader
- qt服务器获取formdata文件,QT上传(PUT)文件
- 学习Spring Data JPA
- mysql mysqlslap压力测试用例
- 在Ubuntu 14.04安装和使用Docker
- 边缘检测算法_机器视觉怎样检测产品边缘
- thinkphp 前台html调用函数 格式化输出
- rm -f .... 恢复
- 如何在 Ubuntu 16.10 的 Unity 8 上运行老式 Xorg 程序
- sql server 替换字符串中的某些字符
- 集成学习01_xgboost参数讲解与实战
- 微信小程序“淘淘猜成语”开发教程(该成语接龙已上线,功能齐全)