AcWing算法基础课笔记——状态压缩DP:蒙德里安的梦想

news2024/11/23 3:30:16

状态压缩DP

状态是整数,但把它看成二进制数,二进制中每一位是0或1表示不同的情况。

蒙德里安的梦想

291. 蒙德里安的梦想 - AcWing题库

题目

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

例如当 𝑁=2,𝑀=4 时,共有 55 种方案。当𝑁=2,𝑀=3 时,共有 3 种方案。

如下图所示:

请添加图片描述

输入格式

输入包含多组测试用例。

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

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

输出格式

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

数据范围

1≤𝑁,𝑀≤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

代码

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

const int N = 12, M = 1 << N;

int n, m;
long long f[N][M];
bool st[M];

int main() {
	int n, m;
	while(cin >> n >> m, n || m) {
		memset(f, 0, sizeof f);
		
		//枚举所有状态,看是否存在连续奇数个0 
		for(int i = 0; i < 1 << n; i ++ ) {
			st[i] = true;
			int cnt = 0;  //表示当前这段连续0的个数
			for(int j = 0; j < n; j ++ ) {
				if(i >> j & 1) {
					if(cnt & 1) st[i] = false;
					cnt = 0;
				}
				else cnt ++;
			}
			
			if(cnt & 1) st[i] = false;  //最后一段0的个数 
		}
		
		f[0][0] = 1;
		for(int i = 1; i <= m; i ++ ) {
			for(int j = 0; j < 1 << n; j ++ ) {
				for(int k = 0; k < 1 << n; k ++ ) {
					if((j & k) == 0 && st[j | k]) {
						f[i][j] += f[i - 1][k];
					}
				}
			}
		}
		
		cout << f[m][0] << endl;
	}
}

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

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

相关文章

算法训练营day19--530.二叉搜索树的最小绝对差+501.二叉搜索树中的众数+236. 二叉树的最近公共祖先

一、530.二叉搜索树的最小绝对差 题目链接&#xff1a;https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 文章讲解&#xff1a;https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF…

Lobe Chat openai claude

claude-3-5-sonnet-20240620 $ docker run -d -p 3210:3210 \-e OPENAI_API_KEYsk-xxxx \-e OPENAI_PROXY_URLhttps://api-proxy.com/v1 \-e ACCESS_CODElobe66 \--name lobe-chat \lobehub/lobe-chatDocker 部署 更新 docker ps CONTAINER ID IMAGE …

【Playwright+Python】手把手带你写一个自动化测试脚本

如何使用代理方式打开网页 在 playwright.chromium.launch() 中传入 proxy 参数即可&#xff0c;示例代码如下&#xff1a; 1、同步写法&#xff1a; from playwright.sync_api import sync_playwrightproxy {server: http:/127.0.0.1:8080}def run():with sync_playwright(…

18.枚举

学习知识&#xff1a;枚举类型、相关的使用方法 Main.java&#xff1a; public class Main {public static void main(String[] args) {myenum[] colorlist myenum.values();//获取枚举中所有对象的引用数组for (myenum one : colorlist){System.out.println(one.toString(…

fork 是一个创建新进程的系统调用

在计算机科学中&#xff0c;fork 是一个创建新进程的系统调用。具体来说&#xff0c;fork 调用会创建一个与当前进程几乎完全相同的副本&#xff0c;包括父进程的内存布局、环境变量、打开的文件描述符等。这个新的进程被称为子进程&#xff0c;而原始进程被称为父进程。 以下…

汇聚荣做拼多多电商怎么运营?

在探讨如何有效运营拼多多电商平台时&#xff0c;我们需要首先明确一个核心问题&#xff1a;如何在竞争激烈的市场中突出重围&#xff0c;吸引并留住消费者。接下来&#xff0c;我们将从五个方面深入剖析这一核心内容&#xff0c;确保每一步都精准有效&#xff0c;以白话文的形…

ATFX汇市:加拿大5月CPI数据来袭,USDCAD逼近关键点位

ATFX汇市&#xff1a;今日20:30&#xff0c;加拿大统计局将公布5月未季调CPI年率&#xff0c;前值为2.7%&#xff0c;预期值2.6%&#xff0c;预期将下降0.1个百分点&#xff1b;同一时间公布的还有加拿大5月核心CPI年率&#xff0c;前值为1.6%&#xff0c;低于2%的温和通胀标准…

【Chapter7】虚拟存储系统,计算机操作系统教程,第四版,左万利,王英

文章目录 [toc]零、前言一、外存资源管理1.1 外存空间划分1.2 外存空间分配1.2.1 空闲块链(慢)1.2.2 空闲块表(UNIX)1.2.3 字位映像图 1.3 进程与外存对应关系 二、虚拟页式存储系统2.1 基本原理2.2 内存页框分配策略2.3 外存块的分配策略2.4 页面调入时机2.5 置换算法2.5.1 最…

Transformer的诞生和崛起

智能问答与文本生成&#xff1a;Transformer模型的超能力 ©作者|wy 来源|神州问学 一、引言 NLP&#xff08;自然语言处理&#xff09;作为人工智能领域的一个重要分支&#xff0c;致力于使计算机能够理解和处理人类语言。随着互联网的发展和信息时代的到来&#xff0c;…

docker 容器设置中文环境

1.容器中安装和设置 1.1.进入容器查看已有语言包 locale -a 默认情况下&#xff1a; 1.2 安装中文语言环境 如果没有zh_CN.utf8就安装。 方式1&#xff1a; #直接安装中文语言包 apt-get install -y language-pack-zh-hans 方式2&#xff1a; #安装中文语言环境 apt-g…

系统初始化进程与文件、systemd概述、单元类型、切换运行级别、查看系统默认默认运行、永久切换、常见的系统服务(centos)

init进程 init进程是Linux系统&#xff08;“/sbin/init”&#xff09;中的第一个进程&#xff0c;它是所有其他进程的祖先进程。init进程的进程号&#xff08;PID&#xff09;始终为1。它负责启动和停止系统中的所有其他进程&#xff0c;以及处理系统的各种系统级任务。 ini…

大模型系列之被我忽视的Assistants API

前言 在这篇文章中&#xff0c;我们提到在GPT4.0 turbo发布时&#xff0c;GPTs和Assistants API的出现使得众多创业者一夜无眠。当时看完之后就被我丢到一边&#xff0c;并没有太多关注&#xff0c;随着我们对RAG和Agent的不断深入了解&#xff0c;蓦然回首&#xff0c;越发感…

HarmonyOS Next开发学习手册——通过startAbility拉起文件处理类应用

使用场景 开发者可以通过调用startAbility接口&#xff0c;由系统从已安装的应用中寻找符合要求的应用来实现打开特定文件的意图&#xff0c;例如&#xff1a;浏览器下应用下载PDF文件&#xff0c;可以调用此接口选择文件处理应用打开此PDF文件。开发者需要在请求中设置待打开…

Redis-实战篇-什么是缓存-添加redis缓存

文章目录 1、什么是缓存2、添加商户缓存3、前端接口4、ShopController.java5、ShopServiceImpl.java6、RedisConstants.java7、查看Redis Desktop Manager 1、什么是缓存 缓存就是数据交换的缓冲区&#xff08;称为Cache&#xff09;&#xff0c;是存贮数据的临时地方&#xff…

Linux 异步 I/O 框架 io_uring:基本原理、程序示例与性能压测

Linux 异步 I/O 框架 io_uring 前言Linux I/O 系统调用演进io_uring与 Linux AIO 的不同原理及核心数据结构&#xff1a;SQ/CQ/SQE/CQE带来的好处三种工作模式io_uring 系统调用 API 前言 io_uring 是 2019 年 Linux 5.1 内核首次引入的高性能 异步 I/O 框架&#xff0c;能显著…

【干货】Jupyter Lab操作文档

Jupyter Lab操作文档1. 使用须知2. 定制化Jupyter设置主题显示代码行数设置语言更多设置 3. 认识Jupyter界面4. 初用Jupyter运行调试格式化查看源码 5. 使用Jupyter Terminal6. 使用Jupyter Markdown7. 上传下载文件&#xff08;云服务器中的Jupyter Lab&#xff09;上传文件到…

SAP的RFID

射频识别 &#xff08;RFID&#xff09; 避免了条码扫描的局限性&#xff0c;条码扫描需要对每个条码进行视线访问&#xff0c;并且一次只能用于扫描一个项目。 一次扫描一个标签可能会令人厌烦和压力大&#xff0c;这会增加人为错误的机会。相反&#xff0c;RFID 标签不需要直…

入局AI手机 苹果公布Apple Intelligence

日前&#xff0c;苹果WWDC 2024如期召开。在这持续1个小时44分钟的开发者大会上&#xff0c;苹果在前一个小时里更新了iOS、iPadOS、MacOS等操作系统&#xff0c;而且还首次更新了visionOS。余下的时间全部留给了苹果的“AI大礼包”——Apple Intelligence&#xff08;苹果智能…

全网最强SpringMVC教程 | 万字长文爆肝SpringMVC(一)

SpringMVC_day01 今日内容 理解SpringMVC相关概念完成SpringMVC的入门案例学会使用PostMan工具发送请求和数据掌握SpringMVC如何接收请求、数据和响应结果掌握RESTful风格及其使用完成基于RESTful的案例编写 SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行We…