第八届蓝桥杯C/C++程序设计本科B组决赛 ——瓷砖样式(填空题)【DP?我的暴力排列搜索】...
大致思路:
很努力的题解:
1 using namespace std; 2 int a[4][11]; 3 int n,m; 4 int dir[2][2]={{0,1},{1,0} }; 5 6 int is_range(int x,int y){//判断当前点在范围内返回1 7 if(x<1||x>n||y>m||y<1) 8 return 0; 9 return 1; 10 } 11 int grid(int x,int y){ 12 if(is_range(x-1,y-1)==0)return 0;//判断右下角起往左上 是否出现2*2的小格子是同一种颜色 13 int t=a[x][y]; 14 if(t!=-1&&t==a[x-1][y]&&t==a[x][y-1]&&t==a[x-1][y-1]) 15 return 1; 16 return 0; 17 } 18 set<int>has; 19 20 int gethash(int a[][11],int n,int m){//将整个图用string的“01”串进行存进来 21 int s=0; 22 for(int i=1;i<=n;i++){ 23 for(int j=1;j<=m;j++){ 24 s=(s<<1) + a[i][j]; 25 // s+=ch; 26 } 27 } 28 return s; 29 } 30 31 int ans=0; 32 int check(int i0,int j0,int i1,int j1){ 33 if(grid(i0,j0)||grid(i1,j1)) 34 return 1; 35 return 0; 36 } 37 void dfs(int i0,int j0,int i1,int j1,int step,int n,int m){//step表示本次搜索应该搜索第step块了 38 if(check(i0,j0,i1,j1)==1)//出现四块瓷砖是相同的 39 return ; 40 if(step==16){ ///搜索结束条件,全局已经铺满了15个方块数了 41 int str=gethash(a,n,m);//返回当前局面 42 if(has.count(str)==0){ 43 ans++;has.insert(str); 44 printf("**step=%d,a[]=%10d,ans=%4d\n",step,str,ans); 45 } 46 47 return ; 48 } 49 //int str=gethash(a,n,m);//返回当前局面printf(" step=%d,a[]=%10d,ans=%4d\n",step,str,ans); 50 51 for(int i=1;i<=n;i++){ 52 for(int j=1;j<=m;j++){ 53 if(a[i][j]==-1){ //该地为空 54 for(int k=0;k<=1;k++){//横着或者竖着放一块瓷砖; 55 int dx,dy; 56 dx=i+dir[k][0]; 57 dy=j+dir[k][1]; 58 if(is_range(dx,dy)==0||a[dx][dy]!=-1)continue;//越界,重复 59 for(int col=0;col<=1;col++){ //两种颜色 60 a[i][j]=a[dx][dy]=col; 61 dfs(i,j,dx,dy,step+1,n,m); 62 a[i][j]=a[dx][dy]=-1; 63 } 64 } 65 return ; 66 } 67 } 68 } 69 return ; 70 } 71 72 int main(){ 73 ans=0; 74 has.clear();//清空set 75 memset(a,-1,sizeof(a));//瓷砖黄色——值0,瓷砖橙色--1 76 // n=2;m=3; 77 n=3;m=10; 78 dfs(0,0,0,0,1,n,m); 79 printf("%d\n",ans); 80 81 return 0; 82 }
View Code(代码有详细注释)
———————所以本题我的最终答案是120302!———————————
转载于:https://www.cnblogs.com/zhazhaacmer/p/9046132.html
第八届蓝桥杯C/C++程序设计本科B组决赛 ——瓷砖样式(填空题)【DP?我的暴力排列搜索】...相关推荐
- 2012年第三届蓝桥杯C/C++程序设计本科B组决赛 拼音字母(编程大题)
2012年第三届蓝桥杯C/C++程序设计本科B组决赛题目汇总: http://blog.csdn.net/u014552756/article/details/51399827 拼音字母 在很多软件中 ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛
1.积分之谜(枚举) 2.完美正方形 3.关联账户(并查集) 4.密文搜索 5.居民集会 6.模型染色 1.积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C. 为了促销,每件商品都会返固 ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 ——居民集会(编程大题)
标题:居民集会 蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的 位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距 离为di.每年,蓝桥村都要举行一次集会.今年,由于村里的 ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛第二题
http://www.docin.com/p-506195687.html 这样算不算写了一道题.... 完美正方形 如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形. ...
- 2012年第三届蓝桥杯C/C++程序设计本科B组决赛
1.星期几(取余/excel) 2.数据压缩 3.拼音字母(比较) 4.DNA比对(dp) 5.方块填数 1.星期几 [结果填空] (满分5分) 1949年的国庆节(10月1日)是星期六. ...
- c语言程序设计正方体,2015年第六届蓝桥杯C/C++程序设计本科B组决赛 完美正方形...
完美正方形 如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形.历史上,人们花了很久才找到了若干完美正方形.比如:如下边长的22个正方形 2 3 4 6 7 8 12 13 ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组省赛 星系炸弹(日期推算)
星系炸弹 在X星系的广袤空间中漂浮着许多X星人造"炸弹",用来作为宇宙中的路标. 每个炸弹都可以设定多少天之后爆炸. 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2 ...
- 第三届蓝桥杯C/C++程序设计本科B组省赛题解
1.微生物增殖** 题目: 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍). 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1 ...
- 第十届蓝桥杯大赛青少年创意编程C++组省赛 第1题 水下探测器
/* 第十届蓝桥杯大赛青少年创意编程C++组省赛 第1题 水下探测器(刘昕源)水下探测器可以潜入湖中在任意水深进行科学探索.湖水的最大深度为 h 米,即它在湖底时到水面的距离,0<=h<= ...
最新文章
- 【整理】NSTimer使用及注意事项
- python装饰器实例-基于Python 装饰器装饰类中的方法实例
- 利用Spring框架封装的JavaMail现实同步或异步邮件发送
- 趋势发展之人工智能,入行要趁早
- selenium启动firefox时加载扩展
- python中的多线程-共享全局变量
- Gartner 最新预测:全球云收入将超非云收入,云原生、低代码、SASE 继续普及
- 三、面向对象——9-初始化块
- 幽默度识别第一名解决方案代码及说明
- Java回调机制总结
- Java旅游管理系统
- Linux之kill命令
- 微软更新补丁下载地址
- C语言字符与数字的互转
- 安全报告处理 HCL AppScan Standard
- 读书有益——》《写在人生边上》钱钟书的经典语句( 一)
- c语言分段函数x2-sinx,大学高等数学: 第二章第五讲三种分段函数求导法, 再也不担心了...
- 使用 Mono.Cecil 辅助 Unity3D 手游进行性能测试
- 我在达芬奇的笔记本里,找到了用户画像的起源
- Android 页面Scheme配置