题目传送门

题目

思路

应该是经典铺瓷砖问题了,QAQ。
从左到右,从上到下去遍历这个H*W的网格,每遇到一个1x1的格子:

  • 如果可以放1x1的瓷砖,就放1个1x1的瓷砖
  • 如果可以水平放置1个2x1的瓷砖,就水平放1个2x1的瓷砖
  • 如果可以竖直放置1个2x1的瓷砖,就竖直放1个2x1的瓷砖
    可以用二进制(一个int类型的数)或者二维数组来标记每个格子的状态:有没有铺瓷砖。通过dfs来求解答案。

代码

二进制标记状态法:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <vector>
#include <map>
#include <queue>
#include <limits.h>
#include <stack>
using namespace std;
typedef long long ll;
const int maxn = 110;
int H, W, A, B, ans = 0;
void solve(int s, int bit, int a, int b)
{if(s==H*W){ans++;return ;}if(bit&(1<<s)) return solve(s+1, bit, a, b);if(a){if(s%W!=W-1 && !(bit&(1<<(s+1)))) solve(s+1, bit|(1<<s)|(1<<(s+1)), a-1, b);if(s+W<H*W) solve(s+1, bit|(1<<s)|(1<<(s+W)), a-1, b);}if(b) solve(s+1, bit|(1<<s), a, b-1);
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt", "r", stdin);cin >> H >> W >> A >> B;solve(0, 0, A, B);cout << ans << endl;return 0;
}

二维数组标记状态法:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <vector>
#include <map>
#include <queue>
#include <limits.h>
#include <stack>
using namespace std;
typedef long long ll;
const int maxn = 110;
int H, W, A, B, ans = 0;
int nx, ny;
bool vis[20][20];
void solve(int s, int x, int y, int a, int b)
{if(s==H*W){ans++;return ;}int nx = x+1, ny = y;if(x==W) nx = 1, ny++;if(vis[x][y]) return solve(s+1, nx, ny, a, b);if(a){if(x!=W && !vis[nx][ny]){vis[x][y] = vis[nx][ny] = true;solve(s+1, nx, ny, a-1, b);vis[x][y] = vis[nx][ny] = false;} if(y<H){vis[x][y] = vis[x][y+1] = true;solve(s+1, nx, ny, a-1, b);vis[x][y] = vis[x][y+1] = false;} }if(b){vis[x][y] = true;solve(s+1, nx, ny, a, b-1);vis[x][y] = false;}
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt", "r", stdin);cin >> H >> W >> A >> B;solve(0, 1, 1, A, B);cout << ans << endl;return 0;
}

【ABC196-D】 Hanjo(dfs+状态标记)相关推荐

  1. 洛谷P1562 还是N皇后(DFS+状态压缩+位运算)

    八皇后问题的介绍在此不再赘述,只贴一下经典八皇后问题的实现代码(参考刘汝佳 <算法竞赛入门经典>) void search(int i) {if(i>n){ans++;return; ...

  2. hdu 3681(bfs+dfs+状态压缩)

    解题思路:这道题属于图上来回走的问题,可以把重复走的过程弱化,即只强调从u->v的结果,中间经过的节点都不考虑.这道题里面'G','F','Y'是重要的节点,其余的点我们是可以忽略的,也就是说, ...

  3. uva10160(dfs+状态压缩)

    题意:给出n个点,以及m条边,这些边代表着这些点相连,修一个电力站,若在某一点修一个站,那么与这个点相连的点都可以通电,问所有的点都通电的话至少要修多少个电力站........ 思路:最多给出的是35 ...

  4. AOJ0525 Osenbei【DFS+状态组合】

    おせんべい 問題 IOI製菓では,創業以来の伝統の製法で煎餅(せんべい)を焼いている.この伝統の製法は,炭火で一定時間表側を焼き,表側が焼けると裏返して,炭火で一定時間裏側を焼くというものである.この ...

  5. svn 文件状态标记含义

    svn status打印五列字符,紧跟一些空格,接着是文件或者目录名.第一列告诉一个文件的状态或它的内容,返回代码解释如下: A item 文件.目录或是符号链item预定加入到版本库. C item ...

  6. msm8909耳机孔状态标记

    添加msm8909 添加耳机线是否插入的标记,用于上层读写,cat /sys/module/msm8916_wcd_irq/parameters/msm8x16_line_status 为1表示接入 ...

  7. 【备忘】指定为同名callback的jsonp IE下script loaded状态标记

    [已知] 不知道大家有木有了解过jQuery1.0到2.0时候针对jsonp那一块的修改.v1.0的时候还在使用iframe作为请求数据的临时暂居地.以便让过往数据有据可查.保证了jsonp请求的时候 ...

  8. css实现仿element ui配色的小圆圈状态标记

    实现的效果如图 css代码如下 .status-info{display:inline-block;width: 7px;height:7px;background:#f4f4f5;border-ra ...

  9. 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩

    文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...

  10. 状态压缩+dfs+背包

    状态压缩dp 状态压缩dp就是用二进制数字来表示状态,通过遍历所有状态确定答案,时间复杂度为o(nn2^n),通常只能用来解数据范围小于等于21的. P1433 吃奶酪 #include <bi ...

最新文章

  1. 数组元素替换_LeetCode 题解 | 189. 旋转数组
  2. python 设置 初始值_Python初始值表示为无穷大
  3. linux进程间通讯-共享内存
  4. mysql 5.7.20 安装_MySql 5.7.20安装
  5. Java集合-ArrayList源码解析-JDK1.8
  6. [单选题]$array = array('a','b','c','d'); $array_now = array_splice($array,2); print_r($array_now);...
  7. BZOJ1509: [NOI2003]逃学的小孩
  8. Python的numpy基本用法
  9. Win-MASM64汇编语言-$/取当前行代码的地址
  10. (Quicker)懒人福利:鼠标快捷操作工具箱
  11. thrift 学习 了解
  12. 华为手机鸿蒙系统下载,华为鸿蒙系统手机版
  13. 常用的简单的数值比较方法
  14. 弹性力学经典解法与有限元法的不同特点
  15. 2020Google开发者大会总结
  16. Eclipse中的 项目编码设置
  17. Uber 机器学习平台 — 米开朗基罗
  18. php判断0点到7点凌晨时间段的方法
  19. Mysql访问日志记录
  20. EasyNVR网页摄像机直播方案H5前端构建之:区分页面是自跳转还是分享依据

热门文章

  1. git cherry-pick 的使用
  2. c语言二级考试题型2016,2016年计算机二级《C语言》操作试题及答案
  3. Math详解大全,数学类
  4. linux内核percpu变量声明,Linux内核对per-cpu变量的实现
  5. php通用下载方法,PHP实现打包下载文件的方法示例
  6. 单纯学python能干啥_如何高效学习Python编程,转行的朋友可以过来看看,单纯的经验分享...
  7. python闹钟界面程序_利用QT写一个极简单的图形化Python闹钟程序
  8. javascript自定义alert弹窗
  9. 服务器未能识别 HTTP 标头 SOAPAction 的值
  10. Web前端-HTTP Cache-control