【poj3420】 Quad Tiling
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相关推荐
- 【矩阵乘法】Quad Tiling(poj 3420)
Quad Tiling poj 3420 题目大意 在一个4×n的棋盘上,用1×2的多米诺骨牌把他填满,问有多少种方法 输入样例 1 10000 3 10000 5 10000 0 0 输出样例 1 ...
- 【动态规划】[Uva11270]Tiling Dominoes
这道题就是连通性状态压缩DP,复习了一下. #include <cstdio> #include <iostream> #include <cstring> #in ...
- POJ3420 Quad Tiling【矩阵快速幂】
Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5008 Accepted: 2269 Descripti ...
- POJ3420 Quad Tiling(模板+矩阵快速幂)
Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4107 Accepted: 1878 Descripti ...
- 【Unity】3.1 利用内置的3D对象创建三维模型
分类:Unity.C#.VS2015 创建日期:2016-04-02 一.基本概念 Unity已经内置了一些基本的3D对象,利用这些内置的3D对象就可以直接构建出各种3D模型(当然,复杂的三维模型还需 ...
- POJ前面的题目算法思路【转】
1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...
- 【FFmpeg】ffmpeg 命令查询二 ( 比特流过滤器 | 可用协议 | 过滤器 | 像素格式 | 标准声道布局 | 音频采样格式 | 颜色名称 )
FFmpeg 系列文章目录 [FFmpeg]Windows 搭建 FFmpeg 命令行运行环境 [FFmpeg]FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 ...
- 【运筹学】运输规划、表上作业法总结 ( 运输规划模型 | 运输规划变量个数 | 表上作业法 | 最小元素法 | 差额 Vogel 法 ★ | 闭回路法 ) ★★★
文章目录 一.运输规划模型 1.产销平衡模型 2.产销不平衡模型 二.运输规划数学模型变量个数 三.表上作业法 四.表上作业法 : 求初始基可行解 1.最小元素法 2.差额法 ( Vogel ) 推荐 ...
- 【运筹学】人工变量法总结 ( 人工变量法解的分析 | 标准型变换 | 构造单位阵 | 目标函数引入 M | 计算检验数 | 选择入基变量 | 选择出基变量 | 中心元变换 | ) ★★
文章目录 一.人工变量法及解的分析 二.案例 三.线性规划标准型变换 四.人工变量法构造单位阵 五.初始单纯形表 六.初始单纯形表 : 计算非基变量检验数 七.初始单纯形表 : 最优解判定 八.初始单 ...
最新文章
- BootStrap 智能表单系列 五 表单依赖插件处理
- 什么时候应该将花括号用于ES6导入?
- Spring学习(三)--Spring的IOC
- JavaScript语法详解(三)
- vb6在后台将窗体保存到图片_如何将寺库网多个商品图片一键分类保存到一个目录...
- 大龄程序员想转产品经理?3本书给你最靠谱的进阶攻略
- python 2.7.9 安装beautifulsoup4
- 经典代码d359f1d82912ef1b1cd784bd28829325
- 【3D相册】零基础完成3D相册并配上背景音乐
- 有趣吧–中国最大的在线制作漫画社区 开站了
- 有人在双11疯狂剁手,有人在双11被直播“治愈”
- Echarts之Pie (一)
- Clickhouse 基础知识 - 函数
- 老派程序员:徒手实现伟大成就
- 文件夹固定工具栏_如何将文件夹固定到Windows任务栏
- 自学c语言需要懂英语吗,本人没有英语基础和数学基础,能学好C语言吗?
- IAAS云计算产品畅想-云主机的产品定位
- java gif 帧_修复Java中动画gif的帧频
- 机器学习:参数模型、非参数模型
- Windows下svn使用教程
热门文章
- mysql启动后在哪里编程_启动mysql后怎么连接数据库
- python until怎么用不了_为何你还不懂得如何使用Python协程
- c语言日期星期程序,C语言程序设计: 输入年月日 然后输出是星期几
- 从头开始学python教程_怎样开始自学Python?
- mysql内连接运算量会增加多少_新年手打,40道经典MYSQL面试干货,速来收藏
- linux+任务默认优先级,uclinux内核的任务优先级及其load_weight
- 删除顺序表中所有的的重复数据
- 找出最接近的相似串(DP思想)
- android get请求最长字符,Android OKHTTP3的GET和POST方法(带basic auth)
- linux中断共享程序实现,如何在非实时linux上实现实时应用程序与内核模块之间共享存储器...