蓝桥杯2017国赛 瓷砖样式 dfs+map
标题:磁砖样式小明家的一面装饰墙原来是 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相关推荐
- 蓝桥杯2017国赛 瓷砖样式 dfs+hush
小明家的一面装饰墙原来是 3*10 的小方格. 现在手头有一批刚好能盖住2个小方格的长方形瓷砖. 瓷砖只有两种颜色:黄色和橙色. 小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来. 小明有个 ...
- 蓝桥杯 2017 国赛B组C/C++【对局匹配】
题意就是给我们一串数 让我们尽可能地取 约束条件是a[i] 和a[i]+k不能同时出现 所有元素之间相差k的元素都不能同时出现 让我们求所能取到的最大的数的和是多少 分析: dp思路,这个和树形d ...
- c语言填字母游戏蓝桥杯,蓝桥杯2017国赛JAVAB组 填字母游戏 题解
标题:填字母游戏 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格 ...
- 蓝桥杯2017国赛JAVAB组 填字母游戏 题解
标题:填字母游戏 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格 ...
- 蓝桥杯 2015国赛 穿越雷区
蓝桥杯 2015国赛 穿越雷区 题目链接 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负 ...
- 蓝桥杯 2015国赛 四阶幻方
蓝桥杯 2015国赛 四阶幻方 题目链接 题目描述 把1~16的数字填入4x4的方格中,使得行.列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方. 四阶幻方可能有很多方案.如果固定左上角为1 ...
- 捉迷藏之二-第10届蓝桥杯Scratch国赛真题第6题程序2
本文同步发表于"超平的编程课"公众号,更多教程,可移步至公众号. [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第15 ...
- 蓝桥杯嵌入式国赛模块训练之数码管
文章目录 前言 一.电路原理图 1.共阴极数码管 2.SN74LS595N 3. 扩展板跳线帽连接 二.驱动代码 1.seg.h 2.seg.c 总结 前言 数码管是蓝桥杯嵌入式国赛需准备的第一个模块 ...
- 跑酷游戏-第13届蓝桥杯Scratch国赛真题第3题
[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第27讲. 第13届蓝桥杯青少年组国赛于2022年5月29日举行,形式为在线考试.Scrat ...
最新文章
- 代码 删除的stach 找回_阿里大佬教你,如何写好 Java 代码!
- 22页PPT告诉你5G产业最新投资机会!
- python选出奇数并降序_奇数结点升序偶数结点降序的单链表排序(Python实现)
- python多进程关闭socket_用Python制作一个多进程UDP服务器,一个进程监听一个p
- kafka高可用集群课程介绍
- 根据这博客复习,我收到了BAT等大厂的技术岗offer
- idea 转普通项目为maven 项目
- 编写一个项目开发文档
- Windows底层窗口的实现———学习笔记
- x64 结构体系下的内存寻址
- 一步到位之INNODB
- Atitit webshell选型 1. PHP Shell 2.4	1 1.1. 设置密码	4 2. 测试切换目录	4 2.1. 自己实现	5 1.PHP Shell 2.4 Please co
- 文件删除后未释放磁盘
- 2022年南京大学计算机考研复试考什么|考研复试时间
- 知网研学不同电脑端同步无效问题
- 国际电脑使用执照(ICDL)考试
- Q2财报后股价遭重挫,搜狗的AI招牌也失灵?从翻译录音笔体验看背后的花拳绣腿...
- ECharts中使用tooltip时鼠标移入抖动问题
- PEI表面修饰CNTs步骤及原理
- 树莓派-SIM7600CE 4G部署(PPP拨号方式)