状态压缩DP—蒙德里安的梦想

news2024/11/20 13:37:01

题目链接:AcWing 291. 蒙德里安的梦想
问题描述
在这里插入图片描述
分析

这是一道经典的状态压缩DP问题,横着或者竖着排列1*2的方块
可以发现,横(竖)着的合法排列方案数就是问题的解,因为横(竖)着的合法排列后竖(横)着的只有一种排列方法,
这里我们考虑求横向的排列方案数
状态表示:
用f[i][j]来表示考虑第i行的排列为j时的方案数,j的2进制就代表了排列方式,例如010就代表第二行放一块1*2的小方块

状态转移:
f[i][j]从f[i-1][k](第i-1列)转移而来
需要考虑转移是否合法
(1)首先如果第i-1列的第w行放置了一个小方块,小方块会延申到第i列,那么第i列的第w行就被用了,就不能排放小方块了
所以j&k==0来保证没有冲突
(2)其次,我们要保证横着排列后能让竖着排列也合法,也就是竖着的连续空位置不能是奇数个,在给定行数的情况下这个可以通过预处理提前求出来
考虑这两个条件,f[i][j]+=f[i-1][k]

代码如下

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=12,M=1<<12;
ll f[N][M];//f[i][j]表示当前放置小方块方案为j时的方案数
bool st[M];
bool find(int n,int x){
    int cnt=0;
    for(int i=0;i<n;i++)
        if((x>>i)&1){
            if(cnt&1) return false;
            cnt=0;
        }
        else cnt++;
    if(cnt&1) return false;
    return true;
}
int main(){
    int n,m;
    while(~scanf("%d%d",&n,&m)){
        if(n==0&&m==0) break;
        memset(f,0,sizeof f);
        for(int i=0;i<1<<n;i++) st[i]=find(n,i);
        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;
    }
    return 0;
}

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

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

相关文章

ChatGPT是否可以写出一篇论文

利用AI反哺教育和学术&#xff0c;在训练它写论文的过程中你学到的&#xff0c;比你自己写一篇论文学到的更多。让工具回归工具&#xff0c;让我们变成更好的我们&#xff01; 第一步&#xff1a;现象确认 第二步&#xff1a;学术概念化 第三步&#xff1a;定位优质的学术资源 …

chatgpt赋能python:Python调用主函数语句

Python调用主函数语句 Python是一种高级编程语言&#xff0c;语法简单&#xff0c;易于学习和使用。在Python程序中&#xff0c;主函数是程序的入口&#xff0c;是程序的核心。本文将介绍Python调用主函数语句的相关知识。 什么是主函数 在Python程序中&#xff0c;主函数也…

Git 配置ssh验证 签名

首先你得装了git&#xff0c;linux 自带的&#xff0c;Windows自己下载配置一下。 注意 Windows下要用gitbash输入命令行&#xff0c;如果是Linux 就在默认命令行输入命令即可 大致思路如下&#xff08;不一定对&#xff0c;因为有段时间没弄了&#xff09;&#xff1a; 1. 生…

【软考网络管理员】2023年软考网管初级常见知识考点(27)- 多媒体基础知识

涉及知识点 A/D转换&#xff0c;常见音频格式&#xff0c;容量计算&#xff0c;图形图像格式&#xff0c;动画和视频&#xff0c;常见视频格式&#xff0c;媒体的种类&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。…

能存会算,XHERE+XEDP打造泸县第二人民医院稳固数据底座

泸县第二人民医院采用 XSKY星辰天合支持存算分离的融合计算管理平台 XHERE&#xff0c;对医院底层 IT 架构进行统一规划&#xff0c;满足集成平台建设要求&#xff0c;并完成互联互通成熟度符合性建设。 医院业务的复杂性促成了医院信息系统的多样性&#xff0c;信息集成平台为…

【数据结构与算法】6、栈(Stack)的实现、LeetCode:有效的括号

目录 一、栈&#xff08;Stack&#xff09;二、利用 ArrayList 实现栈三、LeetCode: 有效的括号(1) 思路(2) 代码① 看完思路后自己实现的代码② 老师的代码③ 利用 HashMap 简化代码 一、栈&#xff08;Stack&#xff09; &#x1f331; 栈是一种特殊的线性表&#xff0c;只能…

如何用Python搭建监控平台

监控和运维&#xff0c;是互联网工业链上非常重要的一环。监控的目的就是防患于未然。通过监控&#xff0c;我们能够及时了解到企业网络的运行状态。一旦出现安全隐患&#xff0c;你就可以及时预警&#xff0c;或者是以其他方式通知运维人员&#xff0c;让运维监控人员有时间处…

Modelsim仿真步骤

Modelsim仿真步骤 1.将文件全部编译成功。 2.点击Simulate->Start Simulation… 3.点击后出现如下图所示窗口。 &#xff08;1&#xff09;在work里面找到testbench文件添加&#xff1b; &#xff08;2&#xff09;把Enable optimization前面的“√”去掉&#xff1b; …

找到优秀的软件外包开发公司

当企业需要找外包开发公司时会发现市场上的外包公司非常多&#xff0c;而找到合适自己的软件公司对于一个软件项目的成功至关重要&#xff0c;那怎么选择适合自己的公司呢&#xff1f;今天和大家分享这方面的知识&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&…

开源SCRM营销平台MarketGo-短链获客

一、概述 企业微信为私域运营上线了新的获客工具-获客助手。主要应用的场景是获取新客户&#xff0c;优点是不需要像二维码一样需要扫码或者长按识别&#xff0c;直接点击短连接一键添加。目前此功能还是在内测阶段。 应用的场景&#xff1a;获客的短信&#xff0c;咨询客服等…

LeetCode刷题 | 198. 打家劫舍、337. 打家劫舍 III

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

【vitepress】vitepress使用不完全指南

前言 wue3文档就是用vitepress搭建的,vitepress作为vuepress的精神替代还是非常指定学习的。vitepess只要网项目中放markdown文件就能生成精美的博客网站也算还是比较容易上手的。 项目搭建(参考) 创建项目 pnpm create vitepress # 写上项目名字即可项目启动 # 安装依赖 pn…

基于图的数据关联论文《CLIPPER: A Graph-Theoretic Framework for Robust Data Association》学习

一、基本概念 基本思想是将数据关联问题转换为图&#xff0c;计算最稠密的全连接子图&#xff0c;具体描述有点拗口&#xff1a; 1、图的节点是什么 假设有两组数据setA和setB&#xff0c;setA有a,b,c,d,e这几个点&#xff0c;setB里面有i,j,k,l这个几个点。 如果认为setA中…

【设计模式】模板方法与策略模式的结合使用

文章目录 1. 概述1.1.简述模板方法 2.模板方法实现2.1.简单实现2.2.在SpringBoot中的实现 3.模板方法与策略模式的结合使用3.1.代码实现 4.总结 1. 概述 模板方法是一种非常简单的设计模式&#xff0c;只要能够理解面向对象中的继承与多态就能够理解这种设计模式&#xff0c;我…

安卓布局详解:探索各种布局方式

文章目录 前言一、线性布局&#xff08;LinearLayout&#xff09;二、相对布局&#xff08;RelativeLayout&#xff09;三、帧布局&#xff08;FrameLayout&#xff09;四、表格布局&#xff08;TableLayout&#xff09;五、约束布局&#xff08;ConstraintLayout&#xff09;六…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第十二章 无线网络安全上)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、无线网络技术1、GSM、CDMA与3G网络2、无线局域网 二、移动通信网安全性分析1、GSM网络安全2、3G网络安全 一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员…

springboot项目构建docker镜像部署到云服务器

云服务器系统环境: 华为云 Ubuntu 9.3.0-17ubuntu1~20.04 1.ECS准备docker相关环境 1.1ECS安装docker 一行一行执行 都是从官网找的命令 sudo -i apt update apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL htt…

【Leetcode -872.叶子相似的树 -993.二叉树的堂兄弟节点】

Leetcode Leetcode -872.叶子相似的树Leetcode -993.二叉树的堂兄弟节点 Leetcode -872.叶子相似的树 题目&#xff1a;请考虑一棵二叉树上所有的叶子&#xff0c;这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。 举个例子&#xff0c;如上图所示&#xff0c;给定一棵…

C++ 文件和流

我们已经使用了 iostream 标准库&#xff0c;它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。 本教程介绍如何从文件读取流和向文件写入流。这就需要用到 C 中另一个标准库 fstream&#xff0c;它定义了三个新的数据类型&#xff1a; 数据类型描述of…

React createContext优化方案contextType

我们先来看个这样的组件 import React,{createContext} from "react"const ThemeContext createContext();export default class Demo14 extends React.Component {constructor(props){super(props);this.state {theme:"red"}}render(){const { theme }…