蒙德里安的梦想

题目

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

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

如下图所示:

2411_1.jpg

输入格式

输入包含多组测试用例。

每组测试用例占一行,包含两个整数 N 和 M。

当输入用例 N=0,M=0 时,表示输入终止,且该用例无需处理。

输出格式

每个测试用例输出一个结果,每个结果占一行。

数据范围

1≤N,M≤11

输入样例:

1 2
1 3
1 4
2 2
2 3
2 4
2 11
4 11
0 0

输出样例:

1
0
1
2
3
5
144
51205

AC代码 

 题解推荐:Acwing291. 蒙德里安的梦想:状态压缩dp_阿正的梦工坊的博客-CSDN博客

#include<bits/stdc++.h>
using namespace std;const int N = 12, M = 1 << N;typedef long long LL;LL f[N][M];
vector<int> state[M];
bool st[M];
int n, m;int main(){while(cin >> n >> m, n || m){//预处理1   将空余不是偶数个连续0的状态标记去除;for(int i = 0; i < (1 << n); i++){int cnt = 0;        //计数连续个0的个数bool isvalid = true;//初始默认该状态有效(连续0为偶数)for(int j = 0; j < n; j++)//枚举每一列{if(i >> j & 1)  //i>>j表示i的第j位,该判断即表示当该位的状态为1时{if(cnt & 1) //如果该位的状态为1,之前存在的连续0个数为奇数,则该状态无效{isvalid = false;break;}cnt = 0;    //置零,进入下一次的计数}else cnt ++;}if(cnt & 1)isvalid = false;//之前存在的连续0个数为奇数,该状态无效st[i] = isvalid;    //打标记}//预处理2   将第i-1列的前一列i-2列中存在摆放重合的状态去除for(int i = 0; i < (1 << n); i++){state[i].clear();for(int j = 0; j < (1 << n); j++)   //st[i|j]表示的是状态i与j组合后是否仍合法(即连续0的个数合法)if((i & j) == 0 && st[i | j])state[i].push_back(j);//真正合法的状态}//DPmemset(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 : state[j])          //获取合法的状态进行计算f[i][j] += f[i - 1][k];cout << f[m][0] << endl;}return 0;
}

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

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

相关文章

速腾robosense-sdk配置和使用方法

官方的安装和配置教程https://github.com/RoboSense-LiDAR/rslidar_sdk/ 1.手动下载sdk&#xff0c;下载tar.gz&#xff0c;然后解压缩:Releases RoboSense-LiDAR/rslidar_sdk GitHub 2.个人电脑连接速腾激光雷达后&#xff0c;确保能够ping通。当连接网线后&#xff0c;电…

Lua 批量修改文件夹下文件名

local s io.popen("dir C:\\Users\\lizhiyuan\\Desktop\\国家知识产权局ftp法律状态数据\\data /b/s") local filelist s:read("*a")local start_pos 0while 1 do_,end_pos,line string.find(filelist, "([^\n\r].xml)", start_pos)if not e…

Spring源码学习-SPI机制与Tomcat结合SpringMVC原理剖析

目录 SPIServiceLoader Servlet规范Tomcat与MVCServletContainerInitializer tomcat结合mvc启动tomcat如何切入进来Servlet与Spring定义的Servlettomcat启动 示意图 SPI 全称为:Service Provider Interface(服务提供接口) 接口工程:提供接口实现工程:实现接口,不同的实现工程…

低代码在边缘计算工业软件中的应用

近年来&#xff0c;边缘计算给工业现场带来了许多新的变化。由于计算、储存能力的大幅提升&#xff0c;边缘计算时代的新设备往往能够胜任多个复杂任务。另外&#xff0c;随着网络能力的提升&#xff0c;边缘设备与设备之间、边缘设备与工业互联网云平台之间的通讯延迟与带宽都…

在Linux下做性能分析1:基本模型

介绍 本Blog开始介绍一下在Linux分析性能瓶颈的基本方法。主要围绕一个基本的分析模型&#xff0c;介绍perf和ftrace的使用技巧&#xff0c;然后东一扒子&#xff0c;西一扒子&#xff0c;逮到什么说什么&#xff0c;也不一定会严谨。主要是把这个领域的一些思路和技巧串起来。…

APP开发的成本:全面预算指南

最近&#xff0c;我遇到了很多人在谈论一个重要的话题&#xff1a;“为什么有些人没有 APP开发&#xff0c;而有些人却有&#xff1f;” 我们讨论了预算、竞争、市场趋势以及开发人员如何平衡自己的职责。现在&#xff0c;我将就如何让你的 APP开发项目变得更好&#xff0c;让…

datatables.editor 2.2 for PHP/JS/NodeJS Crack

使用数据表编辑器在几分钟内创建自定义、完全可编辑的表 编辑器添加了三种编辑模式&#xff0c;以适应任何类型的应用程序 新增功能 编辑 删除 搜索&#xff1a; 名字位置办公室开始日期工资名字位置办公室开始日期工资佐藤爱里会计东京2008-11-28$162&#xff0c;700安吉莉卡拉…

艺术欣赏|东风至,乘风起

《东风遂》60x50cm陈可之•1997年绘“大鹏一日同风起&#xff0c;扶摇直上九万里”。油画《东风遂》是陈可之先生三峡系列作品之一&#xff0c;通过描绘雄鹰搏击长空、翱翔天际时的英姿以及地面山河的壮丽&#xff0c;抒发心中豪迈壮阔的情怀&#xff0c;同时也在向世人传递东风…

【C#】并行编程实战:使用并发集合

在上一章的并行编程实现里&#xff0c;为了保护资源&#xff0c;我们对共享资源加锁&#xff08;各种同步原语&#xff09;来进行保护&#xff0c;避免多线程同时访问&#xff08;主要是写入&#xff09;。但一般来说&#xff0c;共享资源是一个可以由多个线程读写的集合&#…

composer的劈坑

现在是php8盛行的天下&#xff0c;安装php8我就不多说了&#xff0c;宝塔、小出面板一大堆&#xff0c;一键安装。真心说方便。&#xff08;好吧&#xff0c;不打广告了&#xff09;&#xff0c;以下是针对 linux 系统 1、安装composer 安装composer之前&#xff0c;需要要先在…

Apache Doris (三十):Doris 数据导入(八)Spark Load 3- 导入HDFS数据

目录 1. 准备HDFS数据 2. 创建Doris表 3. 创建Spark Load导入任务 4. 查看导入任务状态 进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; 宝子们订阅、点赞、收藏不迷路&#xff01;抓紧…

.net core 2.1 简单部署IIS运行

netcore的项目不像netFramework那么方便部署到iis还是要费点功夫的 比如我想把这个netcore2.1的项目部署到iis并运行&#xff1a; 按照步骤走&#xff1a; 一、确认自己的netcore环境 1、需要安装下面3个环境包(如果电脑已安装请忽略) 检查是否安装cmd命令&#xff1a;cmd&…