标题:磁砖样式小明家的一面装饰墙原来是 3*10 的小方格。现在手头有一批刚好能盖住2个小方格的长方形瓷砖。瓷砖只有两种颜色:黄色和橙色。小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来。小明有个小小的强迫症:忍受不了任何2*2的小格子是同一种颜色。(瓷砖不能切割,不能重叠,也不能只铺一部分。另外,只考虑组合图案,请忽略瓷砖的拼缝)显然,对于 2*3 个小格子来说,口算都可以知道:一共10种贴法,

但对于 3*10 的格子呢?肯定是个不小的数目,请你利用计算机的威力算出该数字。注意:你需要提交的是一个整数,不要填写任何多余的内容(比如:说明性文字)

思路

这道题虽然是填空,但是真的好难的,对于dfs不太好的我来说,扣了一下午才扣出来。

一看就是要用dfs(蓝桥杯对dfs是真爱)。具体思路呢直接看代码,我让这道题憋得一点词穷了。

#include<iostream>
#include<cstring>
#include<string>
#include<map>
using namespace std;
map<string,int> hash;
int mp[3][10];
int vis[3][10];
int ans=0;
int m=3,n=10;
int j()
{for(int i=0;i<m-1;i++)//判断2*2方格 for(int j=0;j<n-1;j++)if(mp[i][j]==mp[i][j+1] && mp[i][j]==mp[i+1][j] && mp[i][j]==mp[i+1][j+1])return 0;string s;//将01串成字符串,每种情况肯定是唯一的,利用map判断重复 for(int i=0;i<m;i++)for(int j=0;j<n;j++)s+='0'+mp[i][j];if(!hash.count(s)){hash[s]=1;return 1;}        return 0;
}
void dfs(int x,int y)
{if(x==m)//找到第四行说明前三行一定放满了 {if(j())ans++;return;}if(x<m&&y+1<n&&vis[x][y]==0&&vis[x][y+1]==0){//横着放 vis[x][y]=vis[x][y+1]=1;for(int i=0;i<2;i++) //两种颜色 {mp[x][y]=mp[x][y+1]=i;         if(y+2==n)//放满了一行,换行 dfs(x+1,0);else if(y+2<n) dfs(x,y+2);}vis[x][y]=vis[x][y+1]=0;}if(x+1<m&&y<n&&vis[x][y]==0&&vis[x+1][y]==0){//竖着放 vis[x][y]=vis[x+1][y]=1;for(int i=0;i<2;i++)//两种颜色 {mp[x+1][y]=mp[x][y]=i;            if(y+1<n)dfs(x,y+1);else if(y+1==n)//放满了一行,换行dfs(x+1,0);}vis[x][y]=vis[x+1][y]=0;}if(vis[x][y]==1){if(y<n-1)//优先向右找没有放的位置 dfs(x,y+1);else if(y==n-1)dfs(x+1,0);}
}
int main()
{   memset(mp,0,sizeof(mp));memset(vis,0,sizeof(vis));dfs(0,0);cout<<ans<<endl;return 0;
}

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

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

    小明家的一面装饰墙原来是 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. 代码 删除的stach 找回_阿里大佬教你,如何写好 Java 代码!
  2. 22页PPT告诉你5G产业最新投资机会!
  3. python选出奇数并降序_奇数结点升序偶数结点降序的单链表排序(Python实现)
  4. python多进程关闭socket_用Python制作一个多进程UDP服务器,一个进程监听一个p
  5. kafka高可用集群课程介绍
  6. 根据这博客复习,我收到了BAT等大厂的技术岗offer
  7. idea 转普通项目为maven 项目
  8. 编写一个项目开发文档
  9. Windows底层窗口的实现———学习笔记
  10. x64 结构体系下的内存寻址
  11. 一步到位之INNODB
  12. Atitit webshell选型 1. PHP Shell 2.4 1 1.1. 设置密码 4 2. 测试切换目录 4 2.1. 自己实现 5 1.PHP Shell 2.4 Please co
  13. 文件删除后未释放磁盘
  14. 2022年南京大学计算机考研复试考什么|考研复试时间
  15. 知网研学不同电脑端同步无效问题
  16. 国际电脑使用执照(ICDL)考试
  17. Q2财报后股价遭重挫,搜狗的AI招牌也失灵?从翻译录音笔体验看背后的花拳绣腿...
  18. ECharts中使用tooltip时鼠标移入抖动问题
  19. PEI表面修饰CNTs步骤及原理
  20. 树莓派-SIM7600CE 4G部署(PPP拨号方式)

热门文章

  1. 推荐一个超人气的类似MSN弹出的控件
  2. 是否有唯一的 Android 设备 ID?
  3. CAD二次开发(c#)利用选择集获取标注尺寸
  4. java实现销售预测算法,预测5天销售
  5. C++基础之数组和字符串
  6. 网页设计HTML如何制作选项卡,jQuery制作网页版选项卡
  7. (java)Climbing Stairs
  8. 小伙子开超市,抓住“人性贪婪”,二个步骤过后,生意瞬间火爆!
  9. 初识CornerNet
  10. MFC CString转ASCII字符串