题目链接:http://codeforces.com/gym/101635/attachments

题目大意:

  给出一个 \(N \times M\) 的网格图,请你用 \(1 \times 1\) 和 \(1 \times 2\) 两种纸片填满该图,问有几种方案。

知识点:  矩阵快速幂、DFS

解题思路:

  做这道题如果没有思路的话,建议先看看 \(Matrix67\) 的这篇文章。这道题就是其中的经典题目九的变形。

  由于列数很少,所以我们可以利用列与列之间的状态转移。

  设矩阵 \(Mat[state1][state2]\),其代表填满当前列(当前列的初始状态为\(state1\))并且使得下一列状态为 \(state2\) 的方案数(每一列的状态无非就是这一列哪些格子已经被填,哪些还没被填,我们可以用一个二进制数来表示状态)。

  如此一来,我们就可以先用 \(dfs\) 来求出从第一列的各种状态转移到第二列的各种状态的方案数,然后求出 \(Mat\) 的 \(M\) 次幂 \(ans\) ,答案即为 \(ans[0][0]\).

AC代码:

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9;
struct Matrix {
int mat[][];
};
Matrix Multiply(Matrix x, Matrix y, int n) {
Matrix temp;
memset(temp.mat, , sizeof(temp.mat));
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
for (int k = ; k < n; k++) {
ll tmp=(ll)x.mat[i][k] * y.mat[k][j]%mod;
temp.mat[i][j] = (int)(((ll)temp.mat[i][j]+tmp)%mod);
}
}
}
return temp;
}
Matrix Fast_Power(Matrix a, ll m, int n) {
Matrix res;
memset(res.mat, , sizeof(res.mat));
for (int i = ; i < n; i++) res.mat[i][i] = ; while (m) {
if (m & ) res = Multiply(res, a, n);
m >>= ;
a = Multiply(a, a, n);
}
return res;
} Matrix ans;
void dfs(int org,int now,int nex,int n){
int one[],two[];
memset(one,,sizeof(one));
memset(two,,sizeof(two));
int tnex=nex,tnow=now;
int ind=;
while(now){
one[ind]=now%;
now>>=;
ind++;
}
bool flag=true;
for(int i=;i<n;i++){
if(one[i]!=){
flag=false;
break;
}
} if(flag){
ans.mat[org][tnex]++;
return;
}
ind=;
while(nex){
two[ind]=nex%;
nex>>=;
ind++;
} for(int i=;i<n;i++){
if(one[i]==){
dfs(org,tnow+(<<i),tnex,n);
dfs(org,tnow+(<<i),tnex|(<<i),n);
if(i+<n&&one[i+]==){
dfs(org,tnow+(<<i)+(<<(i+)),tnex,n);
}//为了避免重复,我们不在下一列放置 2*1 的纸片
break;
}
}
}
int main(){
// freopen("in.txt","r",stdin);
int N;
ll M;
scanf("%d%lld",&N,&M);
for(int i=;i<(<<N);i++)
dfs(i,i,,N);
ans=Fast_Power(ans,M,(<<N));
printf("%d\n",ans.mat[][]);
return ;
}

Gym101635C Macarons的更多相关文章

  1. Echarts3 关系图-力导向布局图

    因为项目需要,要求实现类似力导图效果的图,我就瞄上了echarts. 注意事项1:由于我的项目要部署到内网,所以js文件要在本地,网上大多力导图都是echarts2的,而其又依赖zrender基础库, ...

  2. 开源库Magicodes.ECharts使用教程

    目录 1    概要    2 2    Magicodes.ECharts工作原理    3 2.1    架构说明    3 2.1.1    Axis    4 2.1.2    CommonD ...

  3. Echars详解

    简介 ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9 /1 ...

  4. Echarts的基本用法

    首先需要到导入echatrs.js文件 <script src="dist/echarts.js"></script> 路径配置 require.confi ...

  5. The 10 best sweet treats in Singapore

    Every time I walk out of Changi airport's air-conditioning into the humid outdoors, there's a sweet ...

  6. ECharts切换主题

    初始化接口,返回ECharts实例,其中dom为图表所在节点,theme为可选的主题,内置主题('macarons', 'infographic')直接传入名称,自定义扩展主题可传入主题对象.如: v ...

  7. Echarts个人实例

    1.deviceOperateTrendIndex.jsp <%@ page language="java" contentType="text/html; cha ...

  8. Echart多图联动

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  9. Echarts折线图表断点如何补全

    Echarts折线图如何补全断点以及如何隐藏断点的title 做报表的时候,尤其是做图表的时候时常会碰到某一记录的值中缺少某个时间段(比如月份或季度)的值,导致图表显示残缺不全,for example ...

随机推荐

  1. Shutdown SpringBoot App

    文章目录 Shutdown Endpoint close Application Context 退出SpringApplication 从外部程序kill App Shutdown SpringBo ...

  2. liunx 之 Ubuntu 网速慢解决方法

    打开终端依次输入以下指令: sudo lshw -numeric -class network sudo ip addr show sudo ip route show sudo tracepath ...

  3. 解决vue中BMap未定义问题

    原文链接: 点我 最近在项目中使用了百度地图来显示物流信息,实现方式有两种: 引用Vue Baidu Map引用BMap存在的问题:\color{red}{存在的问题:}存在的问题::使用BMap可以 ...

  4. Flutter 系统是如何实现ExpansionPanelList的

    老孟导读:Flutter组件有一个很大的特色,那就是很多复杂的组件都是通过一个一个小组件拼装而成的,今天就来说说系统的ExpansionPanelList是如何实现的. 在了解ExpansionPan ...

  5. 如何对Code Review的评论进行分级

    我曾写过一篇关于Code Review的文章<Code Review 最佳实践>,在文章中建议对Code Review的评论进行分级: 建议可以对Review的评论进行分级,不同级别的结果 ...

  6. awk调用外部程序

    程序的功能很简单: 调用外部解密程序decoder,将文件第二列字段解密,然后写入新文件中. BEGIN { OFS = "\t" } { outputFileName = &qu ...

  7. Java笔记(day20-22)

    IO流: 输入流.输出流 字节流.字符流:为了处理文字数据方便而出现的对象. (其实这些对象的内部使用的还是字节流(因为文字最终也是字节数据,只不过,通过字节流读取了相对应的字节数,没有对这些字节直接 ...

  8. springboot设置banner

    下图是springboot项目启动的的打印数据,在log中可以清楚的看到有一个spring的banner图案,这个图案其实我们是可以自己进行设置的 我们在项目目录的resources目录下创建一个ba ...

  9. SpringCloudStream学习(二)RabbitMQ中的交换机跟工作模式

    知识储备: 交换机: ​ RabbitMQ中有4中交换机,分别是 (FANOUT)扇形交换机: 扇形交换机是最基本的交换机类型,它所能做的事情非常简单---广播消息.扇形交换机会把能接收到的消息全部发 ...

  10. Qt之connect

    Qt4之connect 基本用法 connect(ui->toolButton, SIGNAL(clicked()), this, SLOT(OnClickButton())); disconn ...