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


大致思路:

有一点需要提醒,两重for循环搜到最近的一个可以落子的起点后,在执行完迭代后进行return,返回上一级;
本题的hash的方法是把每个点的颜色用0或者1进行表示,然后将这三十位变成2进制串进行联合,再转化成10进制存进set中。
  刚开始错误地开了两重for循环来枚举每个点,导致搜索炸了,并出现大量的重复计算;还有,我的开始的去重方法是set<string>has;也就是把30个数按顺序存成字符串,最后加进set里面。

很努力的题解:

 using namespace std;
int a[][];
int n,m;
int dir[][]={{,},{,} }; int is_range(int x,int y){//判断当前点在范围内返回1
if(x<||x>n||y>m||y<)
return ;
return ;
}
int grid(int x,int y){
if(is_range(x-,y-)==)return ;//判断右下角起往左上 是否出现2*2的小格子是同一种颜色
int t=a[x][y];
if(t!=-&&t==a[x-][y]&&t==a[x][y-]&&t==a[x-][y-])
return ;
return ;
}
set<int>has; int gethash(int a[][],int n,int m){//将整个图用string的“01”串进行存进来
int s=;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
s=(s<<) + a[i][j];
// s+=ch;
}
}
return s;
} int ans=;
int check(int i0,int j0,int i1,int j1){
if(grid(i0,j0)||grid(i1,j1))
return ;
return ;
}
void dfs(int i0,int j0,int i1,int j1,int step,int n,int m){//step表示本次搜索应该搜索第step块了
if(check(i0,j0,i1,j1)==)//出现四块瓷砖是相同的
return ;
if(step==){ ///搜索结束条件,全局已经铺满了15个方块数了
int str=gethash(a,n,m);//返回当前局面
if(has.count(str)==){
ans++;has.insert(str);
printf("**step=%d,a[]=%10d,ans=%4d\n",step,str,ans);
} return ;
}
//int str=gethash(a,n,m);//返回当前局面printf(" step=%d,a[]=%10d,ans=%4d\n",step,str,ans); for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(a[i][j]==-){ //该地为空
for(int k=;k<=;k++){//横着或者竖着放一块瓷砖;
int dx,dy;
dx=i+dir[k][];
dy=j+dir[k][];
if(is_range(dx,dy)==||a[dx][dy]!=-)continue;//越界,重复
for(int col=;col<=;col++){ //两种颜色
a[i][j]=a[dx][dy]=col;
dfs(i,j,dx,dy,step+,n,m);
a[i][j]=a[dx][dy]=-;
}
}
return ;
}
}
}
return ;
} int main(){
ans=;
has.clear();//清空set
memset(a,-,sizeof(a));//瓷砖黄色——值0,瓷砖橙色--1
// n=2;m=3;
n=;m=;
dfs(,,,,,n,m);
printf("%d\n",ans); return ;
}

(代码有详细注释)


上图是n=2,m=3,(注意要在图示中的地方,step修改为4)时的结果10;——过了题目的样例;
下图是n=3,m=10,(在图示中的地方,step修改为16)时的结果,最终答案为120302。

———————所以本题我的最终答案是120302!———————————

 

第八届蓝桥杯C/C++程序设计本科B组决赛 ——瓷砖样式(填空题)【DP?我的暴力排列搜索】的更多相关文章

  1. 第八届蓝桥杯C/C++程序设计本科B组决赛 ——发现环(编程大题_签到题_tarjan判环)

    标题:发现环 小明的实验室有N台电脑,编号1~N.原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络.在树形网络上,任意两台电脑之间有唯一的路径相连. 不过在最近一次维护网络时,管理员误操 ...

  2. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛

    1.积分之谜(枚举) 2.完美正方形 3.关联账户(并查集) 4.密文搜索 5.居民集会 6.模型染色 1.积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C.为了促销,每件商品都会返固定 ...

  3. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 ——居民集会(编程大题)

    标题:居民集会 蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的 位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距 离为di.每年,蓝桥村都要举行一次集会.今年,由于村里的 ...

  4. 2016年第七届蓝桥杯C/C++程序设计本科B组决赛

    2.答案300 刁丝卫代码,比赛时long long写成int,结果成了263...一等擦肩而过... #include <iostream> #include <fstream&g ...

  5. 2014年第五届蓝桥杯C/C++程序设计本科B组决赛

    1.年龄巧合(枚举) 2.出栈次序(推公式/Catalan数) 3.信号匹配(kmp) 4.生物芯片(完全平方数) 5.Log大侠(线段树) 6.殖民地 1.年龄巧合 小明和他的表弟一起去看电影,有人 ...

  6. 2013年第四届蓝桥杯C/C++程序设计本科B组决赛

    1.猜灯谜(枚举) 2.连续奇数和(等差数列) 3.空白格式化(去除空格) 4.高僧斗法(阶梯nim) 5.格子刷油漆(dp) 6.农场阳光 1.猜灯谜 A 村的元宵节灯会上有一迷题:请猜谜 * 请猜 ...

  7. 2012年第三届蓝桥杯C/C++程序设计本科B组决赛

    1.星期几(取余/excel) 2.数据压缩 3.拼音字母(比较) 4.DNA比对(dp) 5.方块填数 1.星期几[结果填空] (满分5分)    1949年的国庆节(10月1日)是星期六.     ...

  8. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 完美正方形

    完美正方形 如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形.历史上,人们花了很久才找到了若干完美正方形.比如:如下边长的22个正方形 2 3 4 6 7 8 12 13 ...

  9. 第七届蓝桥杯C/C++程序设计本科B组决赛 ——机器人塔(程序大题)

    机器人塔 X星球的机器人表演拉拉队有两种服装,A和B.他们这次表演的是搭机器人塔. 类似: A B B A B A A A B B B B B A BA B A B B A 队内的组塔规则是: A 只 ...

随机推荐

  1. adb(Andorid Debug Bridge)安装和使用

    以下是adb工具包最新2017Google官方版下载地址: ADB和Fastboot for Windows https://dl.google.com/android/repository/plat ...

  2. 探索安卓热修复框架AndFix的奥秘

    虽然阿里的AndFix框架已经出来很长时间了,但是还不了解它的同学依然挺多,接下来就跟着我一起来到AndFix的世界里一起看看,如何达到不用重新安装app就可以修复bug. 1.什么是AndFix? ...

  3. LeetCode 589. N叉树的前序遍历(N-ary Tree Preorder Traversal)

    589. N叉树的前序遍历 589. N-ary Tree Preorder Traversal LeetCode589. N-ary Tree Preorder Traversal 题目描述 给定一 ...

  4. .NET Core 配置文件

    老一代配置系统 1,XML格式 格式单一. 2,配置信息Kye,只能一维化配置 3,框架信息和应用程序信息混合到一起 应用程序中是 App.config web项目中           web.co ...

  5. [itext]Java生成PDF文件

    一.前言 最近在做也导出试卷的功能,刚开始是导出为doc,可是导出来格式都有变化,最后说直接将word转为pdf,可是各种不稳定,各种报错.最后想到直接将文件写入pdf(参考:http://www.c ...

  6. 八皇后问题——列出所有的解,可推至N皇后

    <数据结构>--邓俊辉版本 读书笔记 今天学习了回溯法,有两道习题,一道N皇后,一道迷宫寻径.今天,先解决N皇后问题.由于笔者 擅长java,所以用java重现了八皇后问题. 注意是jav ...

  7. C++知识点总结篇

    const在不同位置时的不同意义 指针类型前:声明一个指向常量的指针,程序中不能通过指针来改变它所指向的值,但指针本身的值可以改变,即指针可以指向其他数据: "*"号和指针名之间, ...

  8. wx存储数据到本地及本地获取

    官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorageSync.html 存到本地就是存到手机的 ...

  9. 准备写个Golang开发的教程

    进入golang的开发已经差不多两年了,最近打算写个Golang的教程.目的是让有开发基础,没接触过Golang的人能够愉快高效地写出Golang项目. 1 记得17年底时候,有个特别小的项目,准备试 ...

  10. Spring Boot配置文件的加载顺序

    配置文件的加载顺序, 后加载的会覆盖先加载的:也就是properties配置文件的内容会替换掉.yml及.yaml文件的内容