http://poj.org/problem?id=3420 (题目链接)

题意

  给出$n*m$的网格,用$1*2$的方块覆盖有多少种方案。

Solution

  数据很大,不能直接搞了,我们矩乘一下。0表示已放置,1表示未放置。dfs跑出一个$16*16$的转移矩阵,然后矩乘,最后输出$ans[0][0]$就可以了。

代码

// poj3420
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define HAS 4001
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;int n,m;
LL a[16][16],tmp[16][16],t[16][16],ans[16][16];void dfs(int x,int now,int pre) {if (x==4) {++a[pre][now];return;}dfs(x+1,now<<1|1,pre<<1);dfs(x+1,now<<1,pre<<1|1);if (x<3) dfs(x+2,now<<2,pre<<2);
}
void power() {for (int i=0;i<16;i++) {for (int j=0;j<16;j++) t[i][j]=a[i][j],ans[i][j]=0;ans[i][i]=1;}while (n) {if (n&1) {for (int i=0;i<16;i++)for (int j=0;j<16;j++) {tmp[i][j]=0;for (int k=0;k<16;k++) (tmp[i][j]+=ans[i][k]*t[k][j]%m)%=m;}for (int i=0;i<16;i++)for (int j=0;j<16;j++) ans[i][j]=tmp[i][j];}n>>=1;for (int i=0;i<16;i++)for (int j=0;j<16;j++) {tmp[i][j]=0;for (int k=0;k<16;k++) (tmp[i][j]+=t[i][k]*t[k][j]%m)%=m;}for (int i=0;i<16;i++)for (int j=0;j<16;j++) t[i][j]=tmp[i][j];}
}
int main() {dfs(0,0,0);while (scanf("%d%d",&n,&m)!=EOF && n && m) {power();printf("%lld\n",ans[0][0]);}return 0;
}

转载于:https://www.cnblogs.com/MashiroSky/p/6417325.html

【poj3420】 Quad Tiling相关推荐

  1. 【矩阵乘法】Quad Tiling(poj 3420)

    Quad Tiling poj 3420 题目大意 在一个4×n的棋盘上,用1×2的多米诺骨牌把他填满,问有多少种方法 输入样例 1 10000 3 10000 5 10000 0 0 输出样例 1 ...

  2. 【动态规划】[Uva11270]Tiling Dominoes

    这道题就是连通性状态压缩DP,复习了一下. #include <cstdio> #include <iostream> #include <cstring> #in ...

  3. POJ3420 Quad Tiling【矩阵快速幂】

    Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5008 Accepted: 2269 Descripti ...

  4. POJ3420 Quad Tiling(模板+矩阵快速幂)

    Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4107 Accepted: 1878 Descripti ...

  5. 【Unity】3.1 利用内置的3D对象创建三维模型

    分类:Unity.C#.VS2015 创建日期:2016-04-02 一.基本概念 Unity已经内置了一些基本的3D对象,利用这些内置的3D对象就可以直接构建出各种3D模型(当然,复杂的三维模型还需 ...

  6. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  7. 【FFmpeg】ffmpeg 命令查询二 ( 比特流过滤器 | 可用协议 | 过滤器 | 像素格式 | 标准声道布局 | 音频采样格式 | 颜色名称 )

    FFmpeg 系列文章目录 [FFmpeg]Windows 搭建 FFmpeg 命令行运行环境 [FFmpeg]FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 ...

  8. 【运筹学】运输规划、表上作业法总结 ( 运输规划模型 | 运输规划变量个数 | 表上作业法 | 最小元素法 | 差额 Vogel 法 ★ | 闭回路法 ) ★★★

    文章目录 一.运输规划模型 1.产销平衡模型 2.产销不平衡模型 二.运输规划数学模型变量个数 三.表上作业法 四.表上作业法 : 求初始基可行解 1.最小元素法 2.差额法 ( Vogel ) 推荐 ...

  9. 【运筹学】人工变量法总结 ( 人工变量法解的分析 | 标准型变换 | 构造单位阵 | 目标函数引入 M | 计算检验数 | 选择入基变量 | 选择出基变量 | 中心元变换 | ) ★★

    文章目录 一.人工变量法及解的分析 二.案例 三.线性规划标准型变换 四.人工变量法构造单位阵 五.初始单纯形表 六.初始单纯形表 : 计算非基变量检验数 七.初始单纯形表 : 最优解判定 八.初始单 ...

最新文章

  1. BootStrap 智能表单系列 五 表单依赖插件处理
  2. 什么时候应该将花括号用于ES6导入?
  3. Spring学习(三)--Spring的IOC
  4. JavaScript语法详解(三)
  5. vb6在后台将窗体保存到图片_如何将寺库网多个商品图片一键分类保存到一个目录...
  6. 大龄程序员想转产品经理?3本书给你最靠谱的进阶攻略
  7. python 2.7.9 安装beautifulsoup4
  8. 经典代码d359f1d82912ef1b1cd784bd28829325
  9. 【3D相册】零基础完成3D相册并配上背景音乐
  10. 有趣吧–中国最大的在线制作漫画社区 开站了
  11. 有人在双11疯狂剁手,有人在双11被直播“治愈”
  12. Echarts之Pie (一)
  13. Clickhouse 基础知识 - 函数
  14. 老派程序员:徒手实现伟大成就
  15. 文件夹固定工具栏_如何将文件夹固定到Windows任务栏
  16. 自学c语言需要懂英语吗,本人没有英语基础和数学基础,能学好C语言吗?
  17. IAAS云计算产品畅想-云主机的产品定位
  18. java gif 帧_修复Java中动画gif的帧频
  19. 机器学习:参数模型、非参数模型
  20. Windows下svn使用教程

热门文章

  1. mysql启动后在哪里编程_启动mysql后怎么连接数据库
  2. python until怎么用不了_为何你还不懂得如何使用Python协程
  3. c语言日期星期程序,C语言程序设计: 输入年月日 然后输出是星期几
  4. 从头开始学python教程_怎样开始自学Python?
  5. mysql内连接运算量会增加多少_新年手打,40道经典MYSQL面试干货,速来收藏
  6. linux+任务默认优先级,uclinux内核的任务优先级及其load_weight
  7. 删除顺序表中所有的的重复数据
  8. 找出最接近的相似串(DP思想)
  9. android get请求最长字符,Android OKHTTP3的GET和POST方法(带basic auth)
  10. linux中断共享程序实现,如何在非实时linux上实现实时应用程序与内核模块之间共享存储器...