算法基础之蒙德里安的梦想

蒙德里安的梦想

  • 核心思想: 状态压缩dp

    • 总方案 = 横放的方案 剩下的地方竖着放是固定的了

    • 状态压缩 : 将每一列的图(横终点 横起点 竖) 用一个二进制数存下

      • 向后凸的为1 反之为0
      • 在这里插入图片描述
    • 状态计算: 所有 i – 1 列 不冲突的 都加和

      • f[i , j] = f[i - 1 , k] + …. + …
      • 在这里插入图片描述
    • **不合法状态:**前两种合法 后两种不合法 单个格子不能竖放

      • 在这里插入图片描述
    • 不冲突状态:j & k ==0 没重叠部分j | k 必须是合法的

      • 在这里插入图片描述

朴素版

  •   #include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 12 , M = 1 << N ;  //M为图的最大数 2的N次方int n,m;long long f[N][M];  //开long long的f存bool st[M];  //标记该图是否合法int main(){while(cin>>n>>m , n || m)  //有输入 且均不为0{for(int i=0;i< 1 << n ; i++)  //i<2的n次方//一共n行 每个位置两种选择 共2的n次方{int cnt = 0;  //记录一张图连续的0有多少个st[i] = true;  //初始i图为true合法的for(int j=0;j<n;j++)  //遍历图中每位数{if(i >> j & 1)  //取i图中第j个数 判断是否为1{  //若为1 则判cnt是奇数偶数if(cnt & 1)  //奇数则说明 图不合法{st[i] = false; //有奇数0 直接false 退出循环break;}cnt = 0 ;  //清空cnt 重新开始}else cnt++;  //若为0 cnt++}if(cnt & 1) st[i] = false;  //判断后段0的个数 没有1 进不去上面的判断 }memset(f,0,sizeof f);  //初始化f[0][0] = 1;  //0列 不放方块 方案 = 1for(int i=1;i<=m;i++)  //遍历每一列for(int j=0;j< 1 << n; j++)  //每列2的n次方张图for(int k=0;k< 1 << n;k++)  //前一列也是2的n次方张图if((j & k) == 0 && st[j | k])  //不冲突的条件f[i][j] += f[i-1][k];  //计算cout<<f[m][0]<<endl;  //输出前m-1列排好序 没有凸出来的方案数}}
    

优化版

  •   #include<iostream>#include<cstring>#include<algorithm>#include<vector>using namespace std;const int N = 12 , M = 1 << N ;int n,m;long long f[N][M];bool st[M];vector<vector<int>> state(M);  //用二维数组将与 j 不冲突的k存下 不用去再遍历了int main(){while(cin>>n>>m , n || m){for(int i=0;i< 1 << n ; i++){int cnt = 0;st[i] = true;for(int j=0;j<n;j++){if(i >> j & 1){if(cnt & 1){st[i] = false;break;}cnt = 0 ;}else cnt++;}if(cnt & 1) st[i] = false;}for(int j=0;j< 1<<n;j++){state[j].clear();  //清空之前的for(int k=0;k< 1<<n;k++){if((j & k) == 0 && st[j | k])state[j].push_back(k);  //不冲突放里头}}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 : state[j])  //不冲突的已经存起来了 取出f[i][j] += f[i-1][k];cout<<f[m][0]<<endl;}}
    

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

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

相关文章

小程序域名SSL证书能否用免费的?

在小程序开发中&#xff0c;确保通信安全性是至关重要的一环&#xff0c;而SSL证书正是为此提供了有效的保障。SSL证书通过加密数据传输&#xff0c;防止数据被中间人恶意窃取或篡改&#xff0c;为用户和应用提供了更安全的通信环境。 针对小程序域名的SSL证书&#xff0c;通常…

【HTML5】第1章 HTML5入门

学习目标 了解网页基本概念&#xff0c;能够说出网页的构成以及网页相关名词的含义 熟悉Web标准&#xff0c;能够归纳Web标准的构成。 了解浏览器&#xff0c;能够说出各主流浏览器的特点。 了解HTML5技术&#xff0c;能够知道HTML5发展历程、优势以及浏览器对HTML5的支持情…

PINNs解麦克斯韦方程

1 问题介绍 麦克斯韦方程控制着光的传播及其与物质的相互作用。因此&#xff0c;利用计算电磁学模拟求解麦克斯韦方程对理解光与物质相互作用和设计光学元件起着至关重要的作用。对于线性、非磁性、各向同性材料没有电、磁电流密度的方程通常可以写成如下形式&#xff1a; 2 物…

C# WPF上位机开发(Web API联调)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很多时候&#xff0c;客户需要开发的不仅仅是一个上位机系统&#xff0c;它还有其他很多配套的系统或设备&#xff0c;比如物流小车、立库、数字孪…

CentOS安装Maven教程-shell脚本一键安装配置

文章目录 前言一、Maven安装教程1. 确认系统环境2. 下载和解压Maven3. 配置环境变量4. 验证安装5. 设置镜像站 二、Maven安装教程&#xff08;使用shell脚本一键安装配置&#xff09;1. 复制脚本2. 增加执行权限3. 执行脚本4. 加载用户环境变量 总结 前言 本教程将介绍如何在C…

基于ssm的程序设计实践项目管理系统+jsp论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本实践项目管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

swift-碰到的问题

如何让工程不使用storyboard和scene 删除info.plist里面的Application Scene mainifest 删除SceneDelegate.swift 删除AppDelegate.swift里面的这两个方法 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession…

【年度征文】回顾2023,迎接2024

转眼一年~~2023又到年底了&#xff0c;CSDN年度征文如约而至&#xff01;不知不觉又在CSDN平台写了488篇博文&#xff0c;非常感谢CSDN提供的平台&#xff0c;同时也感谢关注和支持博主的粉丝们&#xff0c;在马上到来新的一年里&#xff0c;我会继续努力&#xff01;也非常感谢…

<JavaEE> 协议格式 -- 应用层协议 HTTP

目录 一、HTTP的概念 1&#xff09;什么是HTTP协议&#xff1f; 2&#xff09;什么是超文本&#xff1f; 二、HTTP协议格式 三、请求&#xff08;request&#xff09; 1&#xff09; 方法&#xff08;Method&#xff09; 1> GET方法 2> POST方法 3> GET和POS…

linux下docker搭建mysql8

1&#xff1a;环境信息 centos 7,mysql8 安装docker环境 2.创建mysql容器 2.1 拉取镜像 docker pull mysql:8.0.23 2.2 查询镜像拉取成功 docker images 2.3 创建挂载的目录文件 mkdir /usr/mysql8/conf mkdir /usr/mysql8/data ##给data文件赋予操作权限 chmod 777 /…

mfc100u.dll文件丢失了要怎么解决?修复mfc100u.dll详细指南

mfc100u.dll文件丢失了要怎么解决?首先让我们扒一扒什么是 mfc100u.dll。这玩意儿是 Microsoft Visual Studio 2010 的一部分&#xff0c;它就像一款程序生活中不可或缺的零件&#xff0c;没了它&#xff0c;程序肯定跑不起来。想想看&#xff0c;没有一个重要的零件&#xff…

DOA估计算法——迭代自适应算法(IAA)

1 简介 迭代自适应法 (Iterative Adaptive Approach&#xff0c;IAA)估计算法最早由美国的电气工程师和数学家Robert Schmidt和Roy A. Kuc在1986年的一篇论文"Multiple Emitter Location and Signal Parameter Estimation"中首次提出了这一算法&#xff0c; IAA DOA …

jQuery显示,切换,隐藏的使用练习

<!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>标题</title><style>div {width: 200px;height: 200px;background-color: red;display: none;}</style> </head> <body>…

thinkphp+vue+mysql企业车辆管理系统m117l

“企业车辆管理系统”是运用php语言和vue框架&#xff0c;以Mysql数据库为基础而发出来的。为保证我国经济的持续性发展&#xff0c;必须要让互联网信息时代在我国日益壮大&#xff0c;蓬勃发展。伴随着信息社会的飞速发展&#xff0c;企业车辆管理系统所面临的问题也一个接一个…

提升效率:使用注解实现精简而高效的Spring开发

IOC/DI注解开发 1.0 环境准备1.1 注解开发定义bean步骤1:删除原XML配置步骤2:Dao上添加注解步骤3:配置Spring的注解包扫描步骤4&#xff1a;运行程序步骤5:Service上添加注解步骤6:运行程序知识点1:Component等 1.2 纯注解开发模式1.2.1 思路分析1.2.2 实现步骤步骤1:创建配置类…

SpringBoot整合Canal

一 linux docker compose版本 1.第一步&#xff1a;基础环境 &#xff08;1&#xff09;第1步&#xff1a;安装jak、maven、git、nodejs、npm yum install maven mvn -v 安装maven时会帮安装jdkyum install git git --version 2.27.0yum in…

【C++】开源:libev事件循环库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍libev事件循环库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c…

Java EE Servlet之Servlet API详解

文章目录 1. HttpServlet1.1 核心方法 2. HttpServletRequest3. HttpServletResponse 接下来我们来学习 Servlet API 里面的详细情况 1. HttpServlet 写一个 Servlet 代码&#xff0c;都是要继承这个类&#xff0c;重写里面的方法 Servlet 这里的代码&#xff0c;只需要继承…

企业如何做好内容?媒介盒子分享

在个性化算法的支持下&#xff0c;企业通过创作优质内容使消费者主动选择企业的时代已经来临&#xff0c;对于中小企业来说&#xff0c;这是能够低成本进行营销的好机会。但是有许多企业对内容的理解依旧是片面的&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;企业如何做…

Spring-5-切入点的高级使用

Spring提供了两个额外的Pointcut实现&#xff0c;分别是ComposablePointcut和ControlFlowPointcut,它们提供了所需的灵活性。 使用控制流切入点 由ControlFlowPointcut类实现的Spring控制流切入点类似于许多其他AOP实现中可用的cflow构造&#xff0c;尽管功能上没有那么强大。…