原题地址

铺瓷砖的变种,做法也是类似

假设地板长下面这样,灰色的是无法填充的空洞,初始时可以把N块之外的地板填充成灰色的,便于边界处理

假设现在从后向前已经处理完了一部分,绿色的砖块代表已经遍历过了,蓝色虚线框代表已经计算完成的子问题

现在要遍历红色边框的地砖

只可能有两种铺法:

如果可以向下铺,很简单,递推到另一个子问题

如果向右铺,就有些麻烦了,又两种可能

第一种可能,有块灰色的砖,如下图所示,则规约成一个子问题

第二种可能,没有灰色的砖,下面也可以横着放,那么规约成另一个子问题

处理完这一步,就可以继续处理其他的砖了,也同样是类似的步骤

代码:

  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <cstring>
  7. using namespace std;
  8.  
  9. #define MAX_N 128
  10.  
  11. int N, T;
  12. bool can[MAX_N][MAX_N];
  13. bool u[MAX_N];
  14. bool d[MAX_N];
  15.  
  16. int main() {
  17. /* Enter your code here. Read input from STDIN. Print output to STDOUT */
  18. cin >> T;
  19. while (T--) {
  20. cin >> N;
  21.  
  22. memset(u, , sizeof(u));
  23. memset(d, , sizeof(d));
  24. for (int i = ; i < N; i++) {
  25. char c;
  26. cin >> c;
  27. u[i] = c == '' ? true : false;
  28. }
  29. for (int i = ; i < N; i++) {
  30. char c;
  31. cin >> c;
  32. d[i] = c == '' ? true : false;
  33. }
  34.  
  35. memset(can, , sizeof(can));
  36. for (int i = ; i < ; i++)
  37. for (int j = ; j < ; j++)
  38. can[N + i][N + j] = true;
  39.  
  40. int i = N;
  41. int j = N;
  42. while (i >= || j >= ) {
  43. if (--j >= ) {
  44. if (!d[j]) {
  45. can[i][j] = can[i][j + ];
  46. } else {
  47. if (u[i])
  48. can[i][j] |= can[i + ][j + ];
  49. if (d[j + ]) {
  50. if (!u[i])
  51. can[i][j] |= can[i + ][j + ];
  52. if (u[i] && u[i + ])
  53. can[i][j] |= can[i + ][j + ];
  54. }
  55. }
  56. }
  57. if (--i >= ) {
  58. if (!u[i]) {
  59. can[i][j] = can[i + ][j];
  60. } else {
  61. if (d[j])
  62. can[i][j] |= can[i + ][j + ];
  63. if (u[i + ]) {
  64. if (!d[j])
  65. can[i][j] |= can[i + ][j + ];
  66. if (d[j] && d[j + ])
  67. can[i][j] |= can[i + ][j + ];
  68. }
  69. }
  70. }
  71. }
  72.  
  73. cout << (can[][] ? "YES" : "NO") << endl;
  74. }
  75. return ;
  76. }

HackerRank# Hexagonal Grid的更多相关文章

  1. Hackerrank - The Grid Search

    https://www.hackerrank.com/challenges/the-grid-search/forum 今天碰见这题,看见难度是Moderate,觉得应该能半小时内搞定. 读完题目发现 ...

  2. 正六边形网格化(Hexagonal Grids)原理与实现

    在路径规划.游戏设计栅格法应用中,正六边形网格不如矩形网格直接和常见,但是正六边形具有自身的应用特点,更适用于一些特殊场景中,比如旷阔的海洋.区域或者太空.本文主要讲述如何对正六边形进行几何学分析.网 ...

  3. Machine Learning and Data Mining(机器学习与数据挖掘)

    Problems[show] Classification Clustering Regression Anomaly detection Association rules Reinforcemen ...

  4. Hackerrank Connected Cell in a Grid

    Problem Statement You are given a matrix with m rows and n columns of cells, each of which contains ...

  5. ExtJS 4.2 Grid组件的单元格合并

    ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...

  6. WPF中Grid实现网格,表格样式通用类

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

  7. 在 Windows Phone 中,为 Grid 添加 Tilt 效果

    在 Windows Phone 中,Tilt 效果是比较经典的效果,我们可以很简单的为按钮等控件添加这样的效果(使用 Windows Phone Toolkit 的Tilt 效果),但是,如果我们想要 ...

  8. wpf 列表、菜单 收起与展开,通过Grid DoubleAnimation或者Expander实现

    菜单收缩有很多种方法具体如何实现还是看个人想法: 第一种通过后台控制收起与展开: 效果图: 代码 : <Grid> <Grid.ColumnDefinitions> <C ...

  9. Sencha ExtJS 6 Widget Grid 入门

    最近由于业务需要,研究了一下Sencha ExtJS 6 ,虽然UI和性能上据相关资料说都有提升,但是用起来确实不太顺手,而且用Sencha cmd工具进行测试和发布,很多内部细节都是隐藏的,出了问题 ...

随机推荐

  1. Oracle汇总

    1.数据库事务并发会产生那些问题?有哪些隔离级别,分别能够避免什么错误,而无法避免什么错误? a.事务并发会导致三种问题:脏读.不可重复读.幻象读 脏读:读取了未提交的数据 不可重复读:前后读取同一行 ...

  2. nmon安装和使用介绍

    使用参考地址:百度中搜索 nmon 博客园 使用文档参考地址:http://nmon.sourceforge.net/pmwiki.php?n=Site.Documentation nmmon地址:h ...

  3. 洛谷 P2617 Dynamic Ranking

    题目描述 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是多少(1≤k≤ ...

  4. 在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个。必须提供所有成员。 (microsoft.sqlserver.smo)

    问题:在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个.必须提供所有成员. (micro ...

  5. 生成随机ID且唯一

    var T = [ {P:11,G:2}, {P:101,G:7}, {P:1009,G:26}, {P:10007,G:59}, {P:100003,G:242}, {P:1000003,G:568 ...

  6. lucene4.7实例详解

    java.lang.UnsupportedClassVersionError: org/apache/lucene/index/IndexableField : Unsupported major.m ...

  7. OmniFocus

    褪墨・时间管理 “把所有事情都从你的脑袋里弄出来.在事情出现就做好相关行动的一系列决定,而不是在事情爆发的时候.以合适的类别组织好你的项目的各种提醒以及下一步行动.保持你的系统更新和完整,及时进行回顾 ...

  8. ios软件设计中注意点

    1.取消系统自带渲染效果 2.取消屏幕旋转 3.项目中搜索丢失文件

  9. react入门(上)

    1. ReactJS是什么? 1). Facebook开源的一个js库 2). 一个用于动态构建用户界面的js库2. React的特点 * Declarative(声明式编码) * Component ...

  10. Python学习笔记2(序列)

    元组不可变序列 tuple函数 总结 字符串 基本字符串的操作 字符串格式化 字符串方法 find join lower replace split strip translate 小结 元组:不可变 ...