POJ 3420 Quad Tiling
矩阵快速幂。先要处理出第i列每个状态下,让该状态填满,下一列可以出现的状态。因为N较大,可以矩阵加速。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<iostream> using namespace std; typedef long long LL; const double pi=acos(-1.0),eps=1e-8; void File() {freopen("D:\\in.txt","r",stdin);freopen("D:\\out.txt","w",stdout); } inline int read() {char c = getchar(); while(!isdigit(c)) c = getchar();int x = 0;while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); }return x; }LL n,MOD;struct Matrix {long long A[18][18];int R, C;Matrix operator*(Matrix b); };Matrix X, Y, Z;Matrix Matrix::operator*(Matrix b) {Matrix c;memset(c.A, 0, sizeof(c.A));int i, j, k;for (i = 1; i <= R; i++)for (j = 1; j <= b.C; j++)for (k = 1; k <= C; k++)c.A[i][j] = (c.A[i][j] + (A[i][k] * b.A[k][j]) % MOD) % MOD;c.R = R; c.C = b.C;return c; }void dfs(int a,int b,int t,int c) {if(t==4) { X.A[c+1][b+1]=1; return; }if(a&(1<<t)) dfs(a,b,t+1,c);else{dfs(a|(1<<t),b|(1<<t),t+1,c);if(t+1<4&&(a&(1<<(t+1)))==0) dfs(a+(1<<t)+(1<<(t+1)),b,t+1,c);} }void init() {memset(X.A, 0, sizeof X.A);memset(Y.A, 0, sizeof Y.A);memset(Z.A, 0, sizeof Z.A);Y.R = 16; Y.C = 16;for (int i = 1; i <= 16; i++) Y.A[i][i] = 1;X.R = 16; X.C = 16;for(int i=0;i<=15;i++) dfs(i,0,0,i);Z.R = 1; Z.C = 16;Z.A[1][1]=1; }void work() {while (n){if (n % 2 == 1) Y = Y*X;n = n >> 1;X = X*X;}Z = Z*Y;printf("%lld\n",Z.A[1][16]); }int main() {while(~scanf("%lld%lld",&n,&MOD)){if(n==0&&MOD==0) break;n++; init();work();}return 0; }
转载于:https://www.cnblogs.com/zufezzt/p/5740777.html
POJ 3420 Quad Tiling相关推荐
- POj 3420 Quad Tiling 状态压缩DP+递推+矩阵快速幂
哈哈,写了好久的,总算对了. 接下来介绍两种思路: 先介绍一种 递推+矩阵的快速幂的方法 一种DP的思想考虑4×n的最后一列 ,可以放的方法一共有5种 1.放4个 1×2 则 为dp[n-2] ...
- 【矩阵乘法】Quad Tiling(poj 3420)
Quad Tiling poj 3420 题目大意 在一个4×n的棋盘上,用1×2的多米诺骨牌把他填满,问有多少种方法 输入样例 1 10000 3 10000 5 10000 0 0 输出样例 1 ...
- POJ3420 Quad Tiling【矩阵快速幂】
Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5008 Accepted: 2269 Descripti ...
- 线性代数三之状压DP的矩阵加速——Quad Tiling,Bus公交线路
状压与矩阵加速的藕断丝连 Quad Tiling description solution code [Hnoi2010]Bus 公交线路 description solution code Quad ...
- POJ3420 Quad Tiling(模板+矩阵快速幂)
Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4107 Accepted: 1878 Descripti ...
- 【poj3420】 Quad Tiling
http://poj.org/problem?id=3420 (题目链接) 题意 给出$n*m$的网格,用$1*2$的方块覆盖有多少种方案. Solution 数据很大,不能直接搞了,我们矩乘一下.0 ...
- POJ 2663 Tri Tiling dp 画图找规律
状态:d[i]代表n=i时的方案数. 状态转移方程:d[i]=d[i-2]+2*(d[i-2]+d[i-4]+-+d[0]) i只会为偶数,奇数情况不存在,d[0]=1 找状态转移方程的时候画图更好理 ...
- 《挑战程序设计竞赛(第2版)》习题册攻略
本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...
- POJ 动态规划题目列表
1.这份列表当然不是我原创的,从文库里下载了一份,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号: 容易: 1018, 1050 ...
最新文章
- 三星 6.01 android操作系统耗电,三星6.01系统耗电加快是为什么
- html 广告 ins 原理,如何通过HTML DOM元素显示AdSense广告
- Python函数的参数
- 前端性能优化之缓存技术
- 中国统计网又出干货了——会员分层与顾客忠诚度分析
- matlab无穷积分求解_matlab编程求无穷限定积分
- KITTI数据集下载链接
- MATLAB系统辨识工具箱学习,详细教程!
- 英飞凌XC2000系列单片机FLASH加解密策略
- OpenCASCADE:OCCT应用框架OCAF之XML支持
- viewModel生命周期
- android的数据存储(3)(LitePal)
- gitlab找回已删除的分支
- IMP-00058: IMP-00000: 未成功终止导入
- 【历史上的今天】10 月 3 日:网络空间独立宣言之父诞生;3D 打印概念面世;eBay 收购 PayPal
- Debug Mac M1/M2 tensorflow:Could not find a version that satisfies the requirement tensorflow
- 从键盘输入10个正负相间的整数,输出个位数是奇数、十位数是偶数的所有数。
- 新版火狐浏览器安装xpath插件
- C语言—商品销售系统
- python pyplot颜色_更改matplotlib.pyplot点的颜色
热门文章
- P2689 东南西北
- Flask的上下文管理机制
- Spring Boot系列——7步集成RabbitMQ
- [Mvel]Mvel2.0使用指南一 基础
- Ubuntu 16.04安装XMind 8
- [禅悟人生]拿得起放得下, 才是真幸福
- 在 BT5 下对 Red Hat Enterprise Linux 5.4 的一次***测试
- FreeBSD和Linux如何互相访问文件系统
- 解决通过QQ客户端的空间邮箱等打开空间邮箱
- WebRequest 请求被中止: 请求已被取消。 错误解决方法