小明家的一面装饰墙原来是 3*10 的小方格。

现在手头有一批刚好能盖住2个小方格的长方形瓷砖。
瓷砖只有两种颜色:黄色和橙色。
小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来。
小明有个小小的强迫症:忍受不了任何2*2的小格子是同一种颜色。
(瓷砖不能切割,不能重叠,也不能只铺一部分。另外,只考虑组合图案,请忽略瓷砖的拼缝)
显然,对于 2*3 个小格子来说,口算都可以知道:一共10种贴法,如【p1.png所示】
但对于 3*10 的格子呢?肯定是个不小的数目,请你利用计算机的威力算出该数字。

注意:你需要提交的是一个整数,不要填写任何多余的内容(比如:说明性文字)

这题由于有一个坑,只考虑组合图案,不考虑缝隙,就会产生重复。比如一个


所以使用hush来去重,而且我发现我的dfs好像还是有一点不熟练。。。

#include <iostream>
#include<cstring>
#include<map>
#define LL long long
using namespace std;
int mp[10][20];
map<LL ,LL> hush;
int m,n,ans = 0;
bool judge(){for(int i =0;i<n-1;i++){for(int j=0;j<m-1;j++){if(mp[i][j] == 0 || mp[i+1][j+1] == 0)return false;int tmp = mp[i][j];if(tmp == mp[i+1][j] && tmp == mp[i][j+1] && tmp == mp[i+1][j+1])return false;}}return true;
}
void show(){for(int i=0;i<n;i++){for(int j=0;j<m;j++){cout<<mp[i][j]<<' ';}cout<<endl;}cout<<endl;
}
void dfs(int x,int y){if(y >= m){dfs(x+1,0);return;}if(mp[x][y]){dfs(x,y+1);return;}if(x == n){if(judge()){LL sum = 0;LL bits = 1;for(int i=0;i<n;i++){for(int j=0;j<m;j++){sum+=mp[i][j] * bits;bits <<= 1;}}if(hush[sum] == 0){hush[sum] = 1;ans++;}}return;}if(y+1 < m && mp[x][y+1] == 0 && mp[x][y] == 0){mp[x][y+1] = 1;mp[x][y] = 1;dfs(x,y+1);mp[x][y+1] = 2;mp[x][y] = 2;dfs(x,y+1);mp[x][y+1] = 0;mp[x][y] = 0;}if(x+1 < n && mp[x+1][y] == 0 && mp[x][y] == 0){mp[x+1][y] = 1;mp[x][y] = 1;dfs(x,y+1);mp[x+1][y] = 2;mp[x][y] = 2;dfs(x,y+1);mp[x+1][y] = 0;mp[x][y] = 0;}
}
int main()
{std::ios::sync_with_stdio(false);cin>>n>>m;dfs(0,0);cout<<ans<<endl;return 0;
}

蓝桥杯2017国赛 瓷砖样式 dfs+hush相关推荐

  1. 蓝桥杯2017国赛 瓷砖样式 dfs+map

    标题:磁砖样式小明家的一面装饰墙原来是 3*10 的小方格.现在手头有一批刚好能盖住2个小方格的长方形瓷砖.瓷砖只有两种颜色:黄色和橙色.小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来.小 ...

  2. 蓝桥杯 2017 国赛B组C/C++【对局匹配】

    题意就是给我们一串数  让我们尽可能地取 约束条件是a[i] 和a[i]+k不能同时出现 所有元素之间相差k的元素都不能同时出现  让我们求所能取到的最大的数的和是多少 分析: dp思路,这个和树形d ...

  3. c语言填字母游戏蓝桥杯,蓝桥杯2017国赛JAVAB组 填字母游戏 题解

    标题:填字母游戏 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格 ...

  4. 蓝桥杯2017国赛JAVAB组 填字母游戏 题解

    标题:填字母游戏 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格 ...

  5. 蓝桥杯 2015国赛 穿越雷区

    蓝桥杯 2015国赛 穿越雷区 题目链接 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负 ...

  6. 蓝桥杯 2015国赛 四阶幻方

    蓝桥杯 2015国赛 四阶幻方 题目链接 题目描述 把1~16的数字填入4x4的方格中,使得行.列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方. 四阶幻方可能有很多方案.如果固定左上角为1 ...

  7. 捉迷藏之二-第10届蓝桥杯Scratch国赛真题第6题程序2

    本文同步发表于"超平的编程课"公众号,更多教程,可移步至公众号. [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第15 ...

  8. 蓝桥杯嵌入式国赛模块训练之数码管

    文章目录 前言 一.电路原理图 1.共阴极数码管 2.SN74LS595N 3. 扩展板跳线帽连接 二.驱动代码 1.seg.h 2.seg.c 总结 前言 数码管是蓝桥杯嵌入式国赛需准备的第一个模块 ...

  9. 跑酷游戏-第13届蓝桥杯Scratch国赛真题第3题

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第27讲. 第13届蓝桥杯青少年组国赛于2022年5月29日举行,形式为在线考试.Scrat ...

最新文章

  1. 说说你对 SVG 理解?
  2. [转]Delphi中QuotedStr介绍及使用
  3. leetcode1291. 顺次数(回溯)
  4. PAT A 1118. Birds in Forest (25)【并查集】
  5. vba把json转数组中_JavaScript 中的“黑话”
  6. mysql metadata lock(二)
  7. Ubuntu18.04下QSqlDatabase: QMYSQL driver not loaded
  8. 说下我常用的几个精简版系统的感受
  9. visual studio 2013 编译 filezilla和filezilla server
  10. 使用prettier统一编码风格
  11. cd linux自带系统安装,大神示范win7系统将CDLinux装入硬盘的法子
  12. php根据身份证号码计算年龄
  13. 《Loy解说SpringCloud之Zuul》
  14. Linux快速入门之 静态库和动态库 (07)
  15. java内存分析详解_深入java内存查看与分析详解
  16. mac常用快捷键--在摸爬滚打中熟练
  17. 基于FFmpeg+SDL的视频播放器的制作-基础知识
  18. matlab提取车牌字符程序,matlab - 如何使用Matlab提取和识别车牌号?
  19. JavaScript fetch() 方法
  20. VUE中computed 、created 、mounted 的先后顺序

热门文章

  1. 新手怎么做直播卖货?都有哪些卖货成交话术技巧?
  2. python求特征值以及特征向量,并且输出最小特征值对应的特征向量
  3. 乐2的android版本,乐视2高通|MIUI10|安卓6.0|最终完美版|极速_最新最全的乐2高通版ROM刷机包下载、刷机...
  4. 10年网安经验分享:一般人别瞎入网络安全行业
  5. 【Vue3+Vite+TS项目集成ESlint +Prettier实现代码规范检查和代码格式化】
  6. Landsat 行列号与经纬度在线转换
  7. 与数学式对应的c语言表达式例题,【填空题】已有定义\double n;\,则数学公式“ n(4 一1)”对应的C语言表达式_____...
  8. c语言一般用大写字母定义什么,c语言程序格式是什么
  9. google提示这个不是私密连接
  10. rl滤波器原理_入门篇,层层讲解滤波电路工作原理