题目链接: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代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const ll mod=1e9;
 5 struct Matrix {
 6     int mat[260][260];
 7 };
 8 Matrix Multiply(Matrix x, Matrix y, int n) {
 9     Matrix temp;
10     memset(temp.mat, 0, sizeof(temp.mat));
11     for (int i = 0; i < n; i++) {
12         for (int j = 0; j < n; j++) {
13             for (int k = 0; k < n; k++) {
14                 ll tmp=(ll)x.mat[i][k] * y.mat[k][j]%mod;
15                 temp.mat[i][j] = (int)(((ll)temp.mat[i][j]+tmp)%mod);
16             }
17         }
18     }
19     return temp;
20 }
21 Matrix Fast_Power(Matrix a, ll m, int n) {
22     Matrix res;
23     memset(res.mat, 0, sizeof(res.mat));
24     for (int i = 0; i < n; i++)    res.mat[i][i] = 1;
25
26     while (m) {
27         if (m & 1)    res = Multiply(res, a, n);
28         m >>= 1;
29         a = Multiply(a, a, n);
30     }
31     return res;
32 }
33
34 Matrix ans;
35 void dfs(int org,int now,int nex,int n){
36     int one[10],two[10];
37     memset(one,0,sizeof(one));
38     memset(two,0,sizeof(two));
39     int tnex=nex,tnow=now;
40     int ind=0;
41     while(now){
42         one[ind]=now%2;
43         now>>=1;
44         ind++;
45     }
46     bool flag=true;
47     for(int i=0;i<n;i++){
48         if(one[i]!=1){
49             flag=false;
50             break;
51         }
52     }
53
54     if(flag){
55         ans.mat[org][tnex]++;
56         return;
57     }
58     ind=0;
59     while(nex){
60         two[ind]=nex%2;
61         nex>>=1;
62         ind++;
63     }
64
65     for(int i=0;i<n;i++){
66         if(one[i]==0){
67             dfs(org,tnow+(1<<i),tnex,n);
68             dfs(org,tnow+(1<<i),tnex|(1<<i),n);
69             if(i+1<n&&one[i+1]==0){
70                 dfs(org,tnow+(1<<i)+(1<<(i+1)),tnex,n);
71             }//为了避免重复,我们不在下一列放置 2*1 的纸片
72             break;
73         }
74     }
75 }
76 int main(){
77   //  freopen("in.txt","r",stdin);
78     int N;
79     ll M;
80     scanf("%d%lld",&N,&M);
81     for(int i=0;i<(1<<N);i++)
82         dfs(i,i,0,N);
83     ans=Fast_Power(ans,M,(1<<N));
84     printf("%d\n",ans.mat[0][0]);
85     return 0;
86 }

转载于:https://www.cnblogs.com/Blogggggg/p/8711887.html

Gym101635C Macarons相关推荐

  1. echarts 2.0 macarons主题安装

    2019独角兽企业重金招聘Python工程师标准>>> 主题下载: http://echarts.baidu.com/doc/example/theme/macarons.js 其他 ...

  2. 数据可视化-柱状图-dict结构MACARONS主题

    from pyecharts.charts import Bar from pyecharts.faker import Faker from pyecharts.globals import The ...

  3. 【Codeforces Gym - 101635C Macarons 】【矩阵快速幂+状压】【dfs时间换空间】

    [链接] http://codeforces.com/gym/101635/attachments [题意] 求用1*1,1*2的方格填n*m的矩阵的方法数 [知识点] 状压dfs+矩阵快速幂 [分析 ...

  4. legend位置 pyecharts_可视化入门 | pyecharts全局配置项详解

    更多文章,请见: http://mp.weixin.qq.com/mp/homepage?__biz=MzIxODczMDUwOA==&hid=2&sn=7928727456d4903 ...

  5. 如何使用pyecharts中的主题样式?

    如何使用pyecharts中的主题样式? pyechart为用户提供了一套使用方便的主题风格. 本篇图文将总结pyecharts.globals中ThemeType所有主题风格并进行详细的解释. cl ...

  6. 如何使用pyecharts中自带的数据集?

    如何使用 pyecharts 中自带的数据集? 我们在学习pyehcarts绘图的过程中,需要一些练习的数据. pyecharts为我们提供了这样的数据集 – Faker,存储于 faker.py 文 ...

  7. 一张图,看编程语言十年热度变化

    作者 | 叶庭云 来源 | 修炼Python 头图 | 下载于视觉中国 什么是 TIOBE 排行榜 TIOBE 排行榜是根据互联网上有经验的程序员.课程和第三方厂商的数量,并使用搜索引擎(如Googl ...

  8. python电影数据分析的代码_python-small-examples

    Kaggle电影数据分析实战 本项目基于Kaggle电影影评数据集,通过这个系列,你将学到如何进行数据探索性分析(EDA),学会使用数据分析利器pandas,会用绘图包pyecharts,以及EDA时 ...

  9. python大数据分析实例-用Python整合的大数据分析实例

    用Python进行数据分析的好处是,它的数据分析库目前已经很全面了,有NumPy.pandas.SciPy.scikit-learn.StatsModels,还有深度学习.神经网络的各类包.基本上能满 ...

最新文章

  1. linux nfs系统客户端,Linux系统中挂载共享目录NFS文件系统客户端安装与配置
  2. 图的遍历——深度优先搜索+广度优先搜索
  3. html5简历阅读,HTML5 移动简历模板
  4. 【BZOJ3224】【codevs4543】【tyvj1728】普通平衡树,第一次的splay
  5. 【MySQL】数据库事务处理---MySQL
  6. java鼠标事件_Java 模拟鼠标事件
  7. 深度学习神经网络的预测间隔
  8. linux开机进入不了系统安装软件,揭秘linux系统启动流程,面试官问起来再也不怕了...
  9. 音视频学习(五)——H.264视频码流
  10. VS中多字节字符集和UNICODE字符集的使用说明
  11. 学习是一件很辛苦的事,全世界都一样!
  12. linux 怎么看出io是瓶颈,IO瓶颈探测方法
  13. 做营销运营工作很迷茫?看看资深运营的发展经历和职业规划建议
  14. 《元宇宙十大技术》感谢乔卫兵等6位为出版做出巨大贡献
  15. 2u机架式服务器作用,不仅是一款通用的2U机架式服务器还具有足够的扩展力
  16. 面试被HR问:你有什么优缺点,该如何作答
  17. 机器学习的最佳入门学习资源
  18. maven私服、将项目发布到maven私服、从私服下载jar到本地仓库、将第三方jar安装到本地仓库和maven私服
  19. 第一本书 第九章 使用对象吃货联盟
  20. 工作效率提升技巧三:做事的心态

热门文章

  1. css常用的属性(边框三角形,文本省略号)
  2. 免费excal转dbc工具介绍
  3. L1-007 念数字(Python3)
  4. 最新ONE兔V3.0版/婚恋/交友/社交APP三端源码
  5. Get a Model! Model Hijacking Attack Against Machine Learning Models
  6. 链表逆置(三种方法详解)
  7. 按键边缘检测,控制LED亮灭
  8. 腾讯企业邮箱支持 pop/imap/exchange服务器地址(用于客户端)
  9. 苹果即将量产microLED,将迫使三星等加快该项技术的进展
  10. 前端利用正则对手机号码,身份证号,姓名进行脱敏处理