Gym101635C Macarons
题目链接: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相关推荐
- echarts 2.0 macarons主题安装
2019独角兽企业重金招聘Python工程师标准>>> 主题下载: http://echarts.baidu.com/doc/example/theme/macarons.js 其他 ...
- 数据可视化-柱状图-dict结构MACARONS主题
from pyecharts.charts import Bar from pyecharts.faker import Faker from pyecharts.globals import The ...
- 【Codeforces Gym - 101635C Macarons 】【矩阵快速幂+状压】【dfs时间换空间】
[链接] http://codeforces.com/gym/101635/attachments [题意] 求用1*1,1*2的方格填n*m的矩阵的方法数 [知识点] 状压dfs+矩阵快速幂 [分析 ...
- legend位置 pyecharts_可视化入门 | pyecharts全局配置项详解
更多文章,请见: http://mp.weixin.qq.com/mp/homepage?__biz=MzIxODczMDUwOA==&hid=2&sn=7928727456d4903 ...
- 如何使用pyecharts中的主题样式?
如何使用pyecharts中的主题样式? pyechart为用户提供了一套使用方便的主题风格. 本篇图文将总结pyecharts.globals中ThemeType所有主题风格并进行详细的解释. cl ...
- 如何使用pyecharts中自带的数据集?
如何使用 pyecharts 中自带的数据集? 我们在学习pyehcarts绘图的过程中,需要一些练习的数据. pyecharts为我们提供了这样的数据集 – Faker,存储于 faker.py 文 ...
- 一张图,看编程语言十年热度变化
作者 | 叶庭云 来源 | 修炼Python 头图 | 下载于视觉中国 什么是 TIOBE 排行榜 TIOBE 排行榜是根据互联网上有经验的程序员.课程和第三方厂商的数量,并使用搜索引擎(如Googl ...
- python电影数据分析的代码_python-small-examples
Kaggle电影数据分析实战 本项目基于Kaggle电影影评数据集,通过这个系列,你将学到如何进行数据探索性分析(EDA),学会使用数据分析利器pandas,会用绘图包pyecharts,以及EDA时 ...
- python大数据分析实例-用Python整合的大数据分析实例
用Python进行数据分析的好处是,它的数据分析库目前已经很全面了,有NumPy.pandas.SciPy.scikit-learn.StatsModels,还有深度学习.神经网络的各类包.基本上能满 ...
最新文章
- linux nfs系统客户端,Linux系统中挂载共享目录NFS文件系统客户端安装与配置
- 图的遍历——深度优先搜索+广度优先搜索
- html5简历阅读,HTML5 移动简历模板
- 【BZOJ3224】【codevs4543】【tyvj1728】普通平衡树,第一次的splay
- 【MySQL】数据库事务处理---MySQL
- java鼠标事件_Java 模拟鼠标事件
- 深度学习神经网络的预测间隔
- linux开机进入不了系统安装软件,揭秘linux系统启动流程,面试官问起来再也不怕了...
- 音视频学习(五)——H.264视频码流
- VS中多字节字符集和UNICODE字符集的使用说明
- 学习是一件很辛苦的事,全世界都一样!
- linux 怎么看出io是瓶颈,IO瓶颈探测方法
- 做营销运营工作很迷茫?看看资深运营的发展经历和职业规划建议
- 《元宇宙十大技术》感谢乔卫兵等6位为出版做出巨大贡献
- 2u机架式服务器作用,不仅是一款通用的2U机架式服务器还具有足够的扩展力
- 面试被HR问:你有什么优缺点,该如何作答
- 机器学习的最佳入门学习资源
- maven私服、将项目发布到maven私服、从私服下载jar到本地仓库、将第三方jar安装到本地仓库和maven私服
- 第一本书 第九章 使用对象吃货联盟
- 工作效率提升技巧三:做事的心态
热门文章
- css常用的属性(边框三角形,文本省略号)
- 免费excal转dbc工具介绍
- L1-007 念数字(Python3)
- 最新ONE兔V3.0版/婚恋/交友/社交APP三端源码
- Get a Model! Model Hijacking Attack Against Machine Learning Models
- 链表逆置(三种方法详解)
- 按键边缘检测,控制LED亮灭
- 腾讯企业邮箱支持 pop/imap/exchange服务器地址(用于客户端)
- 苹果即将量产microLED,将迫使三星等加快该项技术的进展
- 前端利用正则对手机号码,身份证号,姓名进行脱敏处理