尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

30 ACwing 291 蒙德里安的梦想 题解
📅 发布时间:2026/6/19 16:36:09

蒙德里安的梦想

题面

求把 \(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;
}

相关新闻

  • 21 ACwing 289 环路运输 题解
  • 13 ACwing 283 Polygon 题解
  • 12 ACwing 282 石子合并 题解

最新新闻

  • CTF密码学实战:Python AES加解密核心原理与攻击技巧
  • 2026 南宁钻石回收最新行情,克拉钻裸钻实时报价参考 - 讯息早知道
  • 北京东城区黄金回收指南:收的顶专业机构VS银行VS金店怎么选? - 奢侈品回收测评
  • 2026西安黄金行情解析|高位变现时机与门店测评 - 奢侈品回收测评
  • 旧饰焕新颜,财富再启航。广州首饰回收传递生活新希望 - 奢品小当家
  • 2026武汉黄金回收TOP5优质商家推荐【6月最新版】设备硬核资金足报价高变现无忧 - 名奢变现站

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号