题目链接

题目

题目描述

给一个a*b矩形,由a*b个单位正方形组成。你需要沿着网格线把它分成分空的两部分,每部分所有格子连通,且至少有一个格子在原矩形的边界上。“连通”是指任两个格子都可以通过水平或者竖直路径连在一起。 求方案总数。例如3*2的矩形有15种方案。

输入描述

输入仅一行,为两个整数a,b。\(1\leq a\leq6\) ,\(2\leq b\leq 7\)

输出描述

输出仅一行,即方案总数。

示例1

输入

3 2

输出

15

示例2

输入

3 3

输出

52

题解

知识点:DFS。

计数问题用dfs较为合适,注意到只要切成两块,因此切入点和切出点各仅有一个,而且切痕不能交叉。因此枚举各边的切入点,搜索所有切痕条数,切出边一次算一条(包括自己边)。

由于枚举时会产生重复情况,因为路径的终点也能作为起点返回去算一条,但结合矩形的对称性,我们枚举横竖两边即可。先给边标号 \(1,2,3,4\) ,假设 \(1,2\) 是横竖两边,那么能搜索出 \(11,11,12,13,14;21,22,22,23,24\) 边上所有点的切线条数,其中 \(11,22\) 有两次是因为自己边作为起点和终点可以有往返两条路径。我们把其中 \(11\) 作为 \(33\) ,\(22\) 作为 \(44\) ,\(21\) 作为 \(34\) 即可有边的全部组合。

时间复杂度 \(O(2^{mn})\)

空间复杂度 \(O(mn)\)

代码

#include <bits/stdc++.h>

using namespace std;

int n, m;
bool vis[7][8];
const int dir[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };
int cnt; void dfs(int x, int y) {
if (!x || !y || x == n || y == m) {
cnt++;
return;
}
for (int i = 0;i < 4;i++) {
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if (vis[xx][yy]) continue;
vis[xx][yy] = 1;
dfs(xx, yy);
vis[xx][yy] = 0;
}
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m;
///只需枚举横竖两条边,因为自己一边或者横竖两边之间任意路径,都会有一个重复的返回路径
///根据对称性,可以看作对边自己或者对边横竖之间的所有路径
for (int i = 1;i < n;i++) {
vis[i][0] = 1;
vis[i][1] = 1;
dfs(i, 1);
vis[i][0] = 0;
vis[i][1] = 0;
}
for (int i = 1;i < m;i++) {
vis[0][i] = 1;
vis[1][i] = 1;
dfs(1, i);
vis[0][i] = 0;
vis[1][i] = 0;
}
cout << cnt << '\n';
return 0;
}

NC19910 [CQOI2007]矩形RECT的更多相关文章

  1. BZOJ1259:[CQOI2007]矩形rect(DFS)

    Description 给一个a*b矩形,由a*b个单位正方形组成.你需要沿着网格线把它分成分空的两部分,每部分所有格子连通,且至少有一个格子在原矩形的边界上.“连通”是指任两个格子都可以通过水平或者 ...

  2. GetRect:通过提供点和宽度返回对应矩形RECT

    RECT GetRect(int x,int y,int width,int height); 描述:通过提供点和宽度返回对应矩形RECT 返回:矩形结构RECT 参数: x:X轴坐标 y:Y轴坐标 ...

  3. 【HTML5 Canvas】计算元件/显示对象经过Matrix变换后在上级/舞台上的bounds(边界矩形rect)

    如上图所示,这样的一个简单矩形,边界矩形是(x:-28, y:-35, width:152, height:128),这是在这个元件/显示对象自己的坐标空间的范围. 那么把这个放到父元件(舞台)中,再 ...

  4. [CQOI2007]矩形

    题目   点这里看题目. 分析   插头 DP ,考虑枚举一下两块之间的分割线,本质上就是两个端点都在边界上的路径.    DP 过程中,我们将没有端点在边界上面的路径称为 1 路径,反之叫 2 路径 ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. BZOJ 刷题总结(持续更新)

    本篇博客按照题号排序(带*为推荐题目) 1008 [HNOI2008]越狱 很经典的题了..龟速乘,龟速幂裸题,, 1010 [HNOI2008]玩具装箱toy* 斜率优化 基本算是裸题. 1012 ...

  7. C:矩形相交、相包含、相离关系判断

    矩形相交 包含 问题.参考 假定矩形是用一对点表达的(minx, miny) (maxx, maxy),那么两个矩形    rect1{(minx1, miny1)(maxx1, maxy1)}    ...

  8. canvas学习总结六:绘制矩形

    在第三章中(canvas学习总结三:绘制路径-线段)我们提高Canvas绘图环境中有些属于立即绘制图形方法,有些绘图方法是基于路径的. 立即绘制图形方法仅有两个strokeRect(),fillRec ...

  9. 学习windows编程 day4 之 矩形的操作

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  10. OpenCV学习笔记(一) - 边界填充、Rect函数

    边界填充: c++实现,测试在mac pro里,输入720p时间0.4ms: cv::copyMakeBorder(image, dst, , , , , cv::BORDER_REPLICATE); ...

随机推荐

  1. 完美:C# Blazor中显示Markdown并添加代码高亮

    昨天发了一篇介绍这个库:C# Blazor中显示Markdown文件,介绍怎么在Blazor中显示Markdown内容的文章,文章内的代码是没有高亮的,思来相去,还是要做好,于是百度到这篇文章.NET ...

  2. 使用WTM框架创建博客系统后台并在云服务器发布

    阅读导航 关于lqclass.com 博客后台前后端部署 2.1 已部署访问链接 2.2 nginx 部署 2.2.1 后台后端发布 2.2.2 后台前端发布 2.2.3 云服务器部署 下次分享 1. ...

  3. 06-verilog基础语法_5

    How to build and test a module parameter defparam修改参数 Task & function Task Function function不可以调 ...

  4. VUE - 配置跨域

    '/api': { target: 'http://localhost:8088/', //这里后台的地址模拟的;应该填写你们真实的后台接口 changOrigin: true, //允许跨域 pat ...

  5. WebApi输出json 不要把首字母转为小写

    services.AddControllers().AddJsonOptions(c => { c.JsonSerializerOptions.PropertyNamingPolicy = ne ...

  6. SV 并发线程

    内容 assign d = a & b; assign e = b | c; begin...end之间的语句是串行执行的 fork....join语句是并行执行的 逻辑仿真工具中的并发性 仿 ...

  7. [转帖]一文读懂 HugePages(大内存页)的原理

    https://juejin.cn/post/6956541214426398757 在介绍 HugePages 之前,我们先来回顾一下 Linux 下 虚拟内存 与 物理内存 之间的关系. 物理内存 ...

  8. [转帖]MobaXterm激活专业版

      本文思路来自 https://github.com/flygon2018/MobaXterm-keygen 有python 环境 并且不看英文的可以继续往下 不然直接访问这个地址也行. 1.需要一 ...

  9. [转帖]《Linux性能优化实战》笔记(八)—— 内存是怎么工作的

    一. 内存映射 我们通常所说的内存容量,指的是物理内存.物理内存也称为主存,大多数计算机用的主存都是动态随机访问内存(DRAM).只有内核才可以直接访问物理内存.那么,进程要访问内存时,该怎么办呢? ...

  10. [转帖]深入理解mysql-第十二章 mysql查询优化-Explain 详解(下)

    我们前面两章详解了Explain的各个属性,我们看到的都是mysql已经生成的执行计划,那这个执行计划的是如何生成的?我们能看到一些过程指标数据吗?实际mysql贴心为我们提供了执行计划的各项成本评估 ...