30 ACwing 291 蒙德里安的梦想 题解

news/2025/10/5 18:11:58/文章来源:https://www.cnblogs.com/michaele/p/19126842

蒙德里安的梦想

题面

求把 \(N \times M\) 的棋盘分割成若干个 \(1 \times 2\) 的长方形,有多少种方案

例如当 \(N = 2, M = 4\) 时,共有 5 中方案。当 \(N = 2, M = 3\) 时,共有 3 种方案

2411_1.jpg|

\(1 \le N, M \le 11\)

题解

可以先转化一下题意,其实可以转化为放横着方块的合法方案数,如果横着的方块已经放好了,那么要将整个棋盘填满,放竖着的方块也只有一种方案

那么考虑两个问题

怎么判断一个已经放好横块的棋盘是否合法,怎么放横块?

我们放好横块后,只需要对于每一列看连续空格的个数是否都是偶数即可

可以这样放横块,设 \(f(i,j)\) 表示已经放好了前 \(i - 1\) 列,从 \(i - 1\) 列到第 \(i\) 列的横块的集合为 \(j\) 的方案数

因为只有 \(1 \times 2\) 的横块,所以我们只需要考虑 \(i - 2 \to i - 1\) 是如何放的,会不会影响到当前这列的状态

设当前状态为 \(j\) ,前面的状态为 \(k\) ,两个状态一定不能有交集,也就是 \(j \& k = 0\)

另外,如果 \(k, j\) 的状态都确定了,那么第 \(i - 1\) 列的状态也就确定了,又因为我们要保证每一列的连续空格数是否为偶数,所以我们还需要判断一下 \(j \mid k\) 这个状态

朴素写法是 \(O(n^24^n)\) 的,会TLE

所以我们加些预处理,具体的时间复杂度多少我也不知道,会很低

code

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>using namespace std;typedef long long ll;const int N = 13, M = (1 << 11) + 7;int n, m;
ll f[N][M];
bool st[M];
vector <int> fac[M];void solve () {memset (st, 0, sizeof st);for (int i = 0; i < (1 << n); i ++) {while (fac[i].size ()) fac[i].pop_back ();}//预处理出合法的匹配状态for (int i = 0; i < (1 << n); i ++) {int cnt = 0, ok = 1;for (int k = 0; k < n; k ++) {if ((i >> k) & 1) {if (cnt & 1) ok = 0;cnt = 0;} else {cnt ++;}}if (cnt & 1) ok = 0;st[i] = ok;}for (int i = 0; i < (1 << n); i ++) {for (int j = 0; j < (1 << n); j ++) {if (i & j) continue;if (st[i | j]) {fac[i].push_back (j);}}}//dp转移memset (f, 0, sizeof f);f[0][0] = 1;for (int i = 1; i <= m; i ++) {for (int j = 0; j < (1 << n); j ++) {for (auto k : fac[j]) {f[i][j] += f[i - 1][k];}}}cout << f[m][0] << endl;
}int main () {while ((cin >> n >> m) && (n || m)) {solve ();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

21 ACwing 289 环路运输 题解

环路运输 题面 在一条环形公路旁均匀地分布着 N 座仓库,编号为 1∼N,编号为 i 的仓库与编号为 j 的仓库之间的距离定义为 \(dist(i,j)=min(|i−j|,N−|i−j|)\),也就是逆时针或顺时针从 i 到 j 中较近的一种。 每座…

26 UVA1630 串折叠 Folding 题解

Folding 题面 折叠由大写字母组成的长度为 \(n\)(\(1\leqslant n\leqslant100\))的一个字符串,使得其成为一个尽量短的字符串,例如 AAAAAA 变成 6(A)。 这个折叠是可以嵌套的,例如 NEEEEERYESYESYESNEEEEERYESYES…

网站结构和布局区别郑州网站推广平台

心路历程&#xff1a; 这道题是一个动态规划题&#xff0c;但是其实递推关系很难想到&#xff0c;如下图所示&#xff1a; MDP建模&#xff1a; 状态&#xff1a;以i,j为右下角的正方形 动作候选集&#xff1a;这道题的动作候选集其实是是否选择其左上角邻接的三个位置&#x…

13 ACwing 283 Polygon 题解

Polygon 题面 “多边形游戏”是一款单人益智游戏。 游戏开始时,给定玩家一个具有 N 个顶点 N 条边(编号 1∼N)的多边形,如图 1 所示,其中 N=4。 每个顶点上写有一个整数 \(a_i\) ,每个边上标有一个运算符 +(加号…

12 ACwing 282 石子合并 题解

石子合并 题面 设有 N 堆石子排成一排,其编号为 1,2,3,…,N。 每堆石子有一定的质量 \(a_i\) ,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和…

11 ACwing 281 Coins 题解

Coins 题面 给定 N 种硬币,其中第 i 种硬币的面值为 \(A_i\),共有 \(C_i\) 个。 从中选出若干个硬币,把面值相加,若结果为 S,则称“面值 S 能被拼成”。 求 1∼M 之间能被拼成的面值有多少个。 \(1 \le N \le 100…

某中心科学家荣获多项计算机技术大奖

本文详细介绍某中心科学家在计算机视觉、机器学习、自动化推理等领域的突破性研究成果,包括深度学习架构优化、组合优化算法、形式化验证等核心技术,以及他们在人工智能和量子计算等前沿领域的贡献。科研人员荣誉与奖…

4 ACwing 274 Mobile Service 题解

Mobile Service 题面 一个公司有三个移动服务员,最初分别在位置 1,2,3 处。 如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个地方去。 某一时刻只有一个员工能移动,且不允许在同样的…

3 ACwing 273 Making the Grade 题解

ACwing 273 Making the Grade 题面 给定长度为 \(N\) 的序列 \(A\) ,构造一个长度为 \(N\) 的序列 \(B\) ,满足\(B\) 非严格单调 \(S = \sum_{i = 1}^N |A_i - B_i|\) 最小求出最小值 \(S\) \(1 \le N \le 2000\) \(…

1 ACwing 271 Mr

ACwing 271 Mr.Yangs Picture Permutations 题面 有 N 个学生合影,站成左端对齐的 k 排,每排分别有 N1,N2,…,Nk 个人。 (N1≥N2≥…≥Nk) 在合影时要求每一排从左到右身高递增,每一列从后到前身高也递增。 第 i 个…

2 ACwing 272 LCIS 最长公共上升子序列 题解

ACwing 272 LCIS 最长公共上升子序列 题面 对于两个数列 A 和 B,如果它们都包含一段位置不一定连续的数,且数值是严格递增的,那么称这一段数是两个数列的公共上升子序列 给定序列 \(A\) 和 \(B\) ,求 \(A\) 和 \(B…

实用指南:【MySQL】索引特性

实用指南:【MySQL】索引特性2025-10-05 17:59 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

镇江做网站公司漳州本地企业网站建设服务

作者推荐 【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径 本文涉及知识点 动态规划汇总 LeetCode879. 盈利计划 集团里有 n 名员工&#xff0c;他们可以完成各种各样的工作创造利润。 第 i 种工作会产生 profit[i] 的利润&#xff0c;它要求 group[…

用 Haxe 实现英文数字验证码识别

一、背景介绍 验证码(CAPTCHA)广泛用于区分人类与机器人,识别验证码通常依赖图像处理与 OCR 技术。本文将使用 Haxe 编程语言结合 Tesseract OCR 来实现英文数字验证码的识别。 Haxe 是一门跨平台语言,可以编译到多…

出题四

T1 T4tjT1 对于一次询问 \((x_1,y_1)\) 到 \((x_2,y_2)\),显然若两点不在同一个联通块中则无解。考虑在同一个联通块中的答案。 我们对整张图进行黑白染色。则有结论:若黑色/白色格点存在不同的数,则一定有解。 证明…

网站推广由什么样的人来做网站后台上次图片

本文作者&#xff1a;dpgisdpg前言参加一起Show桌面活动&#xff0c;顺便搞定之前未做的三星C49HG90DMC显示器开箱作业。搭建一套美如画的桌面&#xff0c;工程堪比“复仇者联盟”&#xff0c;不但需要足够的财力来买装备&#xff0c;还得会构图和互相搭配&#xff0c;打个比方…

网站设计公司深圳缩我短网址生成

1.开发背景 基于以上的章节&#xff0c;了解了 FreeRTOS 多线程间的信号量、队列的使用&#xff0c;已经满足了日常使用场景。其中&#xff0c;队列的使用规定了队伍成员的大小&#xff0c;然而现实使用场景下&#xff0c;很多数据不都是定长大小了&#xff0c;例如不定长的通讯…

二手图书交易网站建设辽宁移动惠生活app官方版

一、新建一个项目 首先&#xff0c;下载微信小程序开发工具&#xff0c;具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后&#xff0c;注册小程序账号&#xff0c;具体注册方法&#xff0c;可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…

ios移动网站开发详解高端室内设计公司

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

实用指南:B站视频下载器 v1.0.4|免登录下载1080P视频

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …