题目大意:问能不能用不超过6张2x2的方纸在4x4的方格中摆出给定的图形?

题目分析:暴力枚举出P(9,6)种(最坏情况)方案即可。

代码如下:

  1. # include<iostream>
  2. # include<cstdio>
  3. # include<cstring>
  4. # include<algorithm>
  5. using namespace std;
  6.  
  7. int vis[10];
  8. char mp[8][15],p1[8][15];
  9.  
  10. bool judge()
  11. {
  12. for(int i=0;i<5;++i)
  13. for(int j=0;j<9;++j)
  14. if(mp[i][j]!=p1[i][j])
  15. return false;
  16. return true;
  17. }
  18.  
  19. bool dfs(int step)
  20. {
  21. if(judge())
  22. return true;
  23.  
  24. if(step>=6)
  25. return false;
  26.  
  27. char p2[6][10];
  28. for(int i=0;i<5;++i)
  29. for(int j=0;j<9;++j)
  30. p2[i][j]=p1[i][j];
  31.  
  32. for(int i=0;i<9;++i){
  33. if(vis[i])
  34. continue;
  35.  
  36. vis[i]=1;
  37. int r=i/3,c=2*(i%3)+1;
  38. p1[r][c]=p1[r][c+2]=p1[r+2][c]=p1[r+2][c+2]='_';
  39. p1[r+1][c-1]=p1[r+2][c-1]=p1[r+1][c+3]=p1[r+2][c+3]='|';
  40. p1[r+1][c]=p1[r+1][c+1]=p1[r+1][c+2]=p1[r+2][c+1]=' ';
  41.  
  42. if(dfs(step+1))
  43. return true;
  44.  
  45. vis[i]=0;
  46. for(int i=0;i<5;++i)
  47. for(int j=0;j<9;++j)
  48. p1[i][j]=p2[i][j];
  49. }
  50.  
  51. return false;
  52. }
  53.  
  54. int main()
  55. {
  56. int cas=0;
  57. while(1)
  58. {
  59. for(int i=0;i<5;++i){
  60. gets(mp[i]);
  61. if(mp[i][0]=='0')
  62. return 0;
  63. }
  64. printf("Case %d: ",++cas);
  65.  
  66. for(int i=0;i<5;++i)
  67. for(int j=0;j<9;++j)
  68. p1[i][j]=' ';
  69.  
  70. memset(vis,0,sizeof(vis));
  71. if(dfs(0))
  72. printf("Yes\n");
  73. else
  74. printf("No\n");
  75. }
  76. return 0;
  77. }

  

UVA-12113 Overlapping Squares (回溯+暴力)的更多相关文章

  1. UVA - 12113 Overlapping Squares(dfs+回溯)

    题目: 给定一个4*4的棋盘和棋盘上所呈现出来的纸张边缘,问用不超过6张2*2的纸能否摆出这样的形状. 思路: dfs纸的张数,每一张中枚举这张纸左上角这个点的位置,暴力解题就可以了. 这个题的覆盖太 ...

  2. UVA 12113 Overlapping Squares

    题意: 总共有6个2*2的正方形,判断是否能够成所给的形状. 思路: 一个正方形总共有9种摆放方式,对于整个地图来说摆放方式总共有2的9次方种摆放方式.然后将地图用9*5的数组表示,正方形的位置用其8 ...

  3. UVA - 12113 Overlapping Squares(重叠的正方形)

    题意:给定一个4*4的棋盘和棋盘上所呈现出来的纸张边缘,问用不超过6张2*2的纸能否摆出指定的形状. 分析:2*2的纸在4*4的棋盘上总共有9种放置位置,枚举所有的放置位置即可.枚举情况总共种. #p ...

  4. UVA.129 Krypton Factor (搜索+暴力)

    UVA.129 Krypton Factor (搜索+暴力) 题意分析 搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可. 注意的地方就是合法串的判断 ...

  5. UVA.10986 Fractions Again (经典暴力)

    UVA.10986 Fractions Again (经典暴力) 题意分析 同样只枚举1个,根据条件算出另外一个. 代码总览 #include <iostream> #include &l ...

  6. 【习题 7-6 UVA - 12113】Overlapping Squares

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 先预处理出来一个正方形. 然后每次枚举新加的正方形左上角的坐标就可以. 注意覆盖的规则,控制一下就可以. 然后暴力判断是否相同. 暴 ...

  7. UVA 270 Lining Up 共线点 暴力

    题意:给出几个点的位置,问一条直线最多能连过几个点. 只要枚举每两个点组成的直线,然后找直线上的点数,更新最大值即可. 我这样做过于暴力,2.7s让人心惊肉跳...应该还能继续剪枝的,同一直线找过之后 ...

  8. uva 10825 - Anagram and Multiplication(暴力)

    题目链接:uva 10825 - Anagram and Multiplication 题目大意:给出m和n,要求找一个m位的n进制数,要求说该数乘以2~m中的随意一个数的结果是原先数各个位上数值的一 ...

  9. UVa 11210 Chinese Mahjong (暴力,递归寻找)

    题意:这个题意.有点麻烦,就是说给定13张牌,让你求能“听”的牌.(具体的见原题) 原题链接: https://uva.onlinejudge.org/index.php?option=com_onl ...

随机推荐

  1. Django框架----数据库表的单表查询

    一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",cou ...

  2. c++编程规范的纲要和记录 (转)

    这是一本好书, 可以让你认清自己对C++的掌握程度. 看完之后,给自己打分,我对C++了解多少? 答案是不足20分. 对于我自己是理所当然的问题, 就不提了, 记一些有启发的条目和细节: (*号表示不 ...

  3. Python Web学习笔记之并发编程IO模型

    了解新知识之前需要知道的一些知识 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调 ...

  4. adb shell 命令详解,android, adb logcat

    http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...

  5. Linux下useradd命令创建的用户不能登录的问题

    Linux下useradd命令创建的用户不能登录的问题  问题: 用useradd命令新创建一个用户tester 密码pwdtest mkdir -p /home/tester(创建文件夹) user ...

  6. 03: itchat发送微信消息

    1.1 微信机器人自动回复消息 1.运行程序,会弹出二维码,扫描授权后即可实现自动回复信息 参考01  参考02 #coding=utf8 import itchat, time from itcha ...

  7. 20145333茹翔《网络对抗》Exp9 Web安全基础实践

    20145333茹翔<网络对抗>Exp9 Web安全基础实践 基础问题回答 1.SQL注入原理,如何防御 SQL注入 就是通过把SQL命令插入到"Web表单递交"或&q ...

  8. Linux设备驱动中的IO模型---阻塞和非阻塞IO【转】

    在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程——网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...

  9. 在ubuntu bionic下对基于qemu的arm64进行linux内核5.0.1版本的编译和运行

    一.环境介绍 OS:ubuntu bionic 64bit 二.准备工作 2.1 安装必要的开发工具 sudo apt-get install git flex bison build-essenti ...

  10. [bzoj 1774][Usaco2009 Dec]Toll 过路费

    题目描述 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费 ...