状态压缩dp[详解 + 例题]

news2024/11/26 16:57:35

1 . 题目 

2 . 分析

可以发现 : 横放的方案数 == 总方案数 ;

        剩下的都是竖放去填补空缺 ;

关于状态定义 : 

考虑按列拜访 , 某列的隔行用0/1表示摆放状态 ;

某行为1 : 表示横放 , 0 : 表示竖放 ;

状态表示 :

f[i][j] : 表示拜访第i列,状态为j的方案数 ;

状态转移 : 

f[i-1][k] --> f[i-1][j];

其中k表示i-1列并且能够与j匹配的状态  : 

状态计算 : 

f[i,j] = sum(f[i-1],k) ;

初值 : 

f[0][0] = 1;

目标 : 

f[m , 0]

3 . 代码 :  

链接 : 

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

#include<bits/stdc++.h>
using namespace std;
const int N =  110 ;
bool st13N];
int f[13][2050] ; 
int main(){
	int n , m ; 
	while(cin >> n >> m ,m||n){
	// 预处理 : 判断合并列的状态i是否合法
	// 合并列1表示横放 , 0表示竖放 
	// 如果合并列存在连续奇数个0,为非法状态,反之合法 
	// 比如n=4的时候,合法状态有0(0000),3(0011),9(1001),12(11010),15(1111) 
	for(int i=0;i< 1<<n ;i++){ // 枚举到2^n-1,一共2^n个状态
	 	st[i] = true ;
		int cnt = 0 ; // 记录合并列中连续0的个数
		for(int j=0;j<n;j++){//从低位到高位移 
			if(i>>j & 1){ // 如果是1 
				if(cnt&1){
					st[i] = false ;
					break ;// 记录i不合法 
				}
			}else cnt ++ ;// 如果是0 , 记录0的个数 	
		} 
		if(cnt & 1) st[i] = false ;//如0100,要判断高位0的情况 
	}
	
	// 状态计算 : 
	memset(f , 0 , sizeof f) ;
	f[0][0] = 1 ;// 第0列不横放是一种合法的方案
	for(int i=1;i<=m;i++){// 阶段 : 枚举列 
		for(int j=0;j< 1<<n ;j++){ // 状态 : 枚举第i列的状态
			for(int k=0;k< 1<<n;k++){ // 枚举第i-1列的状态 
				// 不出现重叠的1,不出现连续的奇数个0
				if((j&k)==0 && st[j|k]){
					f[i][j] += f[i-1][k] ;// 前一列兼容状态的方案数之和 
				} 
			} 
		}
	} 
	cout << f[m][0] << endl ;// 第m列,不横放,即答案 	
	}
}

 4 . 参考

E31 状态压缩DP 蒙德里安的梦想_哔哩哔哩_bilibili

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

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

相关文章

6_springboot_shiro_jwt_多端认证鉴权_过滤器链

1. Shiro过滤器链 ​ Shiro中可以配置多个Filter&#xff0c;那么Shiro是如何管理这些过滤器的&#xff1f;主要是靠ShiroFilterFactoryBean 它是一个Spring Bean&#xff0c;用于在Spring应用中配置Shiro的Web过滤器链。过滤器链是一系列按照特定顺序排列的过滤器&#xff0c…

关于Devc++调试的问题以及解决STL变量无法查看

目前Devc的调试主要有以下几点&#xff1a; 1.调试不能直接查看stl变量&#xff0c;会卡死不动 2.目前单步进入只能用鼠标键按 3.若想按下一步进入函数体内&#xff0c;要在函数体内打上断点才行 4.调试到return 0 ;上一句就停了&#xff0c;不会结束程序 5.目前F2跳至断点…

代码随想录训练营Day35:● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

860.柠檬水找零 题目链接 https://leetcode.cn/problems/lemonade-change/description/ 题目描述 思路 class Solution {public boolean lemonadeChange(int[] bills) {int five 0,ten 0,twenty 0;for (int i 0; i < bills.length; i) {if(bills[i] 5){five;}else i…

记录在项目中引用本地的npm包

1、先把需要的包下载下来&#xff0c;以Photo Sphere Viewer 为引用的npm包、项目以shpereRepo为例子 git clone https://github.com/mistic100/Photo-Sphere-Viewer2、拉下代码后修改之后执行 ./build.sh build.sh #!/usr/bin/env bashyarn run build targetDir"../sh…

SpringBoot 登录认证(二)

HTTP是无状态协议 HTTP协议是无状态协议。什么又是无状态的协议&#xff1f; 所谓无状态&#xff0c;指的是每一次请求都是独立的&#xff0c;下一次请求并不会携带上一次请求的数据。而浏览器与服务器之间进行交互&#xff0c;基于HTTP协议也就意味着现在我们通过浏览器来访…

jmeter中参数加密

加密接口常用的方式有&#xff1a; MD5&#xff0c;SHA&#xff0c;HmacSHA RSA AES&#xff0c;DES&#xff0c;Base64 压测中有些参数需要进行加密&#xff0c;加密方式已接口文档为主。 MD5加密 比如MD5加密的接口文档&#xff1a; 请求URL&#xff1a;http://101.34.221…

Unity AI Navigation自动寻路

目录 前言一、Unity中AI Navigation是什么&#xff1f;二、使用步骤1.安装AI Navigation2.创建模型和材质3.编写向目标移动的脚本4.NavMeshLink桥接组件5.NavMeshObstacle组件6.NavMeshModifler组件 三、效果总结 前言 Unity是一款强大的游戏开发引擎&#xff0c;而人工智能&a…

基于单片机病房呼叫系统数码管显示房号设计

**单片机设计介绍&#xff0c;基于单片机病房呼叫系统数码管显示房号设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机病房呼叫系统数码管显示房号设计概要主要涵盖了利用单片机技术实现病房呼叫系统&#xff0c;并…

基于springboot实现校园周边美食探索及分享平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现园周边美食探索及分享平台系统演示 摘要 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域&#xff0c;传统的…

【SpringCloud】Ribbon负载均衡

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

新家装修选中央空调如何选?认准约克VRF中央空调

在现代家居生活中,追求舒适和健康生活环境的家庭越来越倾向于选择中央空调系统。面对市场上琳琅满目的中央空调品牌,如何挑选一款合适的家用中央空调成为许多消费者的一大难题。今天,我们以约克VRF中央空调为例,深入探讨其特点和优势,为广大家庭提供一个舒适的选择答案。 首先…

玩美移动升级虚拟试妆体验: 推出3D多色腮红AR试妆解决方案

领先的AI和AR美妆和时尚技术解决方案供应商&#xff0c;以及“美力AI”解决方案开发商——玩美移动于今天宣布&#xff0c;其3D腮红虚拟试妆工具已实现进一步技术提升。用户可以通过三色腮红虚拟试妆体验&#xff0c;尝试更多腮红色号、质地以及多种颜色组合妆效。本次虚拟试妆…

应用方案 D431L可调精密基准源,可耐压35V以上

概述 D431L是一种低压三端可调稳压器&#xff0c;保证在适用温度范围内的热稳定性。输出电压可以设置为VREF(约1.24V)~16V&#xff08;接两个外部电阻&#xff09;。该装置具有典型的动态输出0.2Ω的阻抗。在很多应用中&#xff0c;可替代齐纳二极管。 D431L有TO-92和SOT23封装…

Go打造REST Server【二】:用路由的三方库来实现

前言 在之前的文章中&#xff0c;我们用Go的标准库来实现了服务器&#xff0c;JSON渲染重构为辅助函数&#xff0c;使特定的路由处理程序相当简洁。 我们剩下的问题是路径路由逻辑&#xff0c;这是所有编写无依赖HTTP服务器的人都会遇到的问题&#xff0c;除非服务器只处理一到…

用xshell或ftp连接本地虚拟机linux系统,centos7修改动态ip地址

如果不知道怎么下载vm本地虚拟机软件或者不知道怎么安装可以参考我上一篇博客 vmWare虚拟机下载安装详细教程,手把手一步一步教学-CSDN博客 安装好虚拟机软件我们想要通过xshell和ftp工具来管理,小黑框不太舒服哈哈哈 一.准备工作 输入命令来查看当前的ip地址 ip addr 可以…

unity学习(76)--窗口化和后台运行

1.通过如下方式将编译的游戏设置为窗口模式。 成功&#xff1a; 2.现在只有鼠标点击的窗体游戏运动&#xff0c;其他窗体游戏都会卡住。 2.1build setting中 2.2unity内部Project Settings 也被同步修改了

VBA技术资料MF135:多值匹配查找

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

unity 数据的可视化

【Unity 实用插件篇】| 可视化图表插件XCharts (折线图、柱状图、饼图等)详细教学-腾讯云开发者社区-腾讯云 Package https://github.com/XCharts-Team/XCharts/releases 官方文档案例 入门教程&#xff1a;5分钟上手 XCharts 3.0 | XCharts (xcharts-team.github.io)

idea2023+jdk1.8+Maven3.6.3+Testng6.10+junit4.13搭建测试

idea2023jdk1.8Maven3.6.3Testng6.10junit4.13搭建测试 首先创建maven工程 导入依赖 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/…

文心一言 VS 讯飞星火 VS chatgpt (225)-- 算法导论16.3 7题

七、推广赫夫曼算法&#xff0c;使之能生成三进制的码字(即码字由符号0、1、2组成)&#xff0c;并证明你的算法能生成最优三进制码。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 推广赫夫曼算法以生成三进制码字需要对算法进行一定的修改&#xff0c;确保在每…