原题地址

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

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

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

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

只可能有两种铺法:

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

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

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

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

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

代码:

 #include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; #define MAX_N 128 int N, T;
bool can[MAX_N][MAX_N];
bool u[MAX_N];
bool d[MAX_N]; int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
cin >> T;
while (T--) {
cin >> N; memset(u, , sizeof(u));
memset(d, , sizeof(d));
for (int i = ; i < N; i++) {
char c;
cin >> c;
u[i] = c == '' ? true : false;
}
for (int i = ; i < N; i++) {
char c;
cin >> c;
d[i] = c == '' ? true : false;
} memset(can, , sizeof(can));
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
can[N + i][N + j] = true; int i = N;
int j = N;
while (i >= || j >= ) {
if (--j >= ) {
if (!d[j]) {
can[i][j] = can[i][j + ];
} else {
if (u[i])
can[i][j] |= can[i + ][j + ];
if (d[j + ]) {
if (!u[i])
can[i][j] |= can[i + ][j + ];
if (u[i] && u[i + ])
can[i][j] |= can[i + ][j + ];
}
}
}
if (--i >= ) {
if (!u[i]) {
can[i][j] = can[i + ][j];
} else {
if (d[j])
can[i][j] |= can[i + ][j + ];
if (u[i + ]) {
if (!d[j])
can[i][j] |= can[i + ][j + ];
if (d[j] && d[j + ])
can[i][j] |= can[i + ][j + ];
}
}
}
} cout << (can[][] ? "YES" : "NO") << endl;
}
return ;
}

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. ios UITableView顶部向下偏移

    //设置向下偏移20[self.tableView setContentInset:UIEdgeInsetsMake(20,0,0,0)];

  2. spark性能测试理论-Benchmark(转)

    一.Benchmark简介Benchmark是一个评价方式,在整个计算机领域有着长期的应用.正如维基百科上的解释“As computer architecture advanced, it becam ...

  3. 使用 Cosmos DB 创建和查询 NoSQL 表

    本教程演示如何使用 Azure 门户创建 Azure Cosmos DB 帐户,然后使用 DocumentDB .NET API 创建具有分区键的文档数据库和集合.通过在创建集合时定义分区键,应用程序 ...

  4. mac重启privoxy命令

    重启命令 brew services restart privoxy

  5. activeandroid复制本地数据库问题总结

    activeandroid no such table 解决activeandroid no such table failed to read row 0 column 1 from a curso ...

  6. MVC简单登陆验证

    配置文件: <system.web> <authentication mode="Forms"> <!-- 如果验证失败就返回URL的指定界面,设置c ...

  7. 分布式文件系统ceph介绍

    ceph哲学思想 1. 每个组件必须支持扩展 2.不存在单点故障 3.解决方案必须是基于软件的.开源的.适应能力强 4.任何可能的一切必须自我管理 存在的意义:帮助企业摆脱昂贵的专属硬件 ceph目标 ...

  8. Gersgorin 圆盘

    将学习到什么 好多.   Gersgorin 圆盘定理   对任何 \(A \in M_n\),我们总可以记 \(A=D+B\),其中 \(D=\mathrm{diag}(a_{11},\cdots, ...

  9. ubuntu 升级到5.1kernel,打开bbr

    apt-get -f install wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.1/linux-headers-5.1.0-0 ...

  10. struts2的动态方法配置

    动态方法调用配置 <package name="test" extends="struts-default"> <aciton name=&q ...