当前位置: 首页 > news >正文

轮廓线dp:GYM103446C

https://vjudge.net/contest/591700#problem/H

考虑轮廓线dp,当我们枚举到蓝色格子的时候,我们记录红色格子的状态

在这里插入图片描述

每个格子有4种状态

  1. 0有向下
  2. 1需要向上
  3. 2不用管
  4. 3需向右

每次枚举的时候,我们需要考虑这个格子的三种状态:

  1. 1
  2. 0+不放
  3. 0+放

他们会对所有3和同列的值造成影响

当枚举到行末时,我们需要“换行”,把所有3变成1

发现枚举过程中还有再维护一个0/1状态d,表示此行有没有向左

分类讨论即可

O ( 2 n m 4 m ) O(2nm4^m) O(2nm4m)

#include<bits/stdc++.h>
using namespace std;
#ifdef LOCAL#define debug(...) fprintf(stdout, ##__VA_ARGS__)
#else#define debug(...) void(0)
#endif
//#define int long long
inline int read(){int x=0,f=1;char ch=getchar(); while(ch<'0'||
ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
#define fi first
#define se second
//srand(time(0));
#define N 11
#define M 100000
//#define mo
void Min(int &a, int b) {a=min(a, b); 
}
int n, m, i, j, k, T;
int f[N][N][M][2], s, t, d, ans, c, a[N][N]; 
char str[N]; namespace Num {int omg, pw[N], b[N]; int Chan1[M], Chan2[M], Find1[M], Get[M][N], becom[M][N][4]; int zh(int *a) {int ans=0, i; for(i=1; i<=m; ++i) ans=ans*4+a[i]; return ans; }void chai(int s, int *a) {int i; for(i=m; i>=1; --i) a[i]=s%4, s/=4; }void Pre_num() {for(i=1, omg=1, pw[0]=1; i<=m; ++i) omg*=4, pw[i]=pw[i-1]*4; for(i=1; i<=m; ++i) b[i]=2; f[1][0][zh(b)][0]=0; for(s=0; s<omg; ++s) {chai(s, b); //all 3 -> 1for(i=1; i<=m; ++i) if(b[i]==3) b[i]=1; Chan1[s]=zh(b); chai(s, b); //all 3 -> 3for(i=1; i<=m; ++i) if(b[i]==3) b[i]=2; Chan2[s]=zh(b); chai(s, b); //find s[i]for(i=1; i<=m; ++i) Get[s][i]=b[i]; for(i=1; i<=m; ++i) if(b[i]==1) break; if(i<=m) Find1[s]=1; //if s has 1for(i=1; i<=m; ++i) {chai(s, b); for(k=0; k<4; ++k) {b[i]=k; becom[s][i][k]=zh(b); //make s[i] to k}}}}int Change(int s, int i, int x) {return becom[s][i][x]; }
};signed main()
{#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);#endif
//	T=read();
//	while(T--) {
//
//	}memset(f, 0x3f, sizeof(f)); n=read(); m=read(); for(i=1; i<=n; ++i) {scanf("%s", str+1); for(j=1; j<=m; ++j) a[i][j]=str[j]-'0'; }Num::Pre_num(); for(i=1; i<=n; ++i) {for(j=1; j<=m; ++j) {for(s=0; s<Num::omg; ++s) for(d=0; d<=1; ++d) {if(f[i][j-1][s][d]>=100) continue; debug("[%d %d] %d %d\n", i, j-1, s, d); c=Num::Get[s][j]; if(a[i][j]==0 || a[i][j]==2) {t=s; if(c==2 && d==0) t=Num::Change(t, j, 3); Min(f[i][j][t][d], f[i][j-1][s][d]); /********************************/t=Num::Chan2[s]; t=Num::Change(t, j, 0); Min(f[i][j][t][1], f[i][j-1][s][d]+1); }if(a[i][j]==1 || a[i][j]==2) {if(c==1) continue; t=Num::Chan1[s]; 					if(c==0 || c==2) t=Num::Change(t, j, 2); Min(f[i][j][t][0], f[i][j-1][s][d]);}}}for(s=0; s<Num::omg; ++s) for(d=0; d<=1; ++d) {if(f[i][m][s][d]>=100) continue; t=Num::Chan1[s]; Min(f[i+1][0][t][0], f[i][m][s][d]); }}ans=1e9; for(s=0; s<Num::omg; ++s) if(Num::Find1[s]==0) Min(ans, f[n+1][0][s][0]); printf("%d", ans); return 0;
}

相关文章:

轮廓线dp:GYM103446C

https://vjudge.net/contest/591700#problem/H 考虑轮廓线dp&#xff0c;当我们枚举到蓝色格子的时候&#xff0c;我们记录红色格子的状态 每个格子有4种状态 0有向下1需要向上2不用管3需向右 每次枚举的时候&#xff0c;我们需要考虑这个格子的三种状态&#xff1a; 10不放…...

羊驼免疫制备纳米抗体

纳米抗体&#xff08;nanobodies&#xff0c;Nbs&#xff09;是由比利时科学家Hamers等人在骆驼血液内首次发现的一种新型抗体&#xff0c;与传统抗体相比&#xff0c;这种抗体不存在轻链&#xff0c;只有重链抗体&#xff08;HcAb&#xff09;和两个常规的CH2和CH3区组成&…...

【AI好好玩02】利用Lama Cleaner本地实现AIGC试玩:擦除对象、替换对象、更换风格等等

目录 一、安装二、擦除功能1. LaMa模型实操实例一&#xff1a;去除路人实操实例二&#xff1a;去水印实操实例三&#xff1a;老照片修复 2. LDM模型3. ZITS模型4. MAT模型5. FcF模型6. Manga模型 三、替换对象功能1. sd1.52. sd23. anything44. realisticVision1.45. 四个模型的…...

SQL FULL OUTER JOIN 关键字(完整外部连接)||SQL自连接 Self JOIN

SQL FULL OUTER JOIN 关键字 当左&#xff08;表1&#xff09;或右&#xff08;表2&#xff09;表记录匹配时&#xff0c;FULL OUTER JOIN关键字将返回所有记录。 注意&#xff1a; FULL OUTER JOIN可能会返回非常大的结果集&#xff01; SQL FULL OUTER JOIN 语法 SELECT …...

专科医院污水处理设备构造解析及工艺流程

诸城市鑫淼环保小编带大家了解一下专科医院污水处理设备构造解析及工艺流程 主要组成部分&#xff1a; 1.预处理单元 处理流程的起点是预处理单元&#xff0c;用于去除废水中的大颗粒物质和固体废物。这一阶段通常包括隔栅和筛网&#xff0c;以确保进一步处理的污水清洁。 2.生…...

【RabbitMQ】RabbitMQ 消息的可靠性 —— 生产者和消费者消息的确认,消息的持久化以及消费失败的重试机制

文章目录 前言&#xff1a;消息的可靠性问题一、生产者消息的确认1.1 生产者确认机制1.2 实现生产者消息的确认1.3 验证生产者消息的确认 二、消息的持久化2.1 演示消息的丢失2.2 声明持久化的交换机和队列2.3 发送持久化的消息 三、消费者消息的确认3.1 配置消费者消息确认3.2…...

百万套行泊一体量产定点,中国市场「开启」智驾高低速集成

进入2023年&#xff0c;席卷中国市场的行泊一体概念方案进入定点、量产交付的第一波高峰期。这套方案&#xff0c;以高性价比、硬件复用、高低速智驾集成的模式&#xff0c;备受市场青睐。 本周&#xff0c;纵目科技宣布&#xff0c;Amphiman3000行泊一体产品获得长安汽车旗下…...

Gopro hero5运动相机格式化后恢复案例

Gopro运动相机以稳定著称&#xff0c;旗下的Hero系列销售全球。下面我们来看一个Hero5格式化后拍了少量素材的恢复案例。 故障存储:64G MicroSD卡 Exfat文件系统 故障现象: 64G的卡没备份数据时做了格式化操作又拍了一条&#xff0c;发现数据没有备份&#xff0c;客户自行使…...

Microsoft Dynamics 365 CE 扩展定制 - 6. 增强代码

在本章中,我们将介绍以下内容: 使用三层模式重构插件用QueryExpressions替换LINQ数据访问层记录自定义项中的错误将插件转换为自定义工作流活动单元测试插件业务逻辑使用内存上下文对插件进行单元测试端到端集成测试插件分析插件构建通用读取审核插件利用CRM Online实现跨来源…...

基于libopenh264 codec的svc分层流实现方案

OpenH264 http://www.openh264.org/ 是标准的H.264 encoder/decoder. ffmpeg已经集成libopenh264&#xff0c;但不支持svc特性。 openh264 encoder支持svc特性&#xff1a; 1. 时域4层&#xff1a;Temporal scalability up to 4 layers in a dyadic hierarchy 2. 空域4层&#…...

为机器学习算法准备数据(Machine Learning 研习之八)

本文还是同样建立在前两篇的基础之上的&#xff01; 属性组合实验 希望前面的部分能让您了解探索数据并获得洞察力的几种方法。您发现了一些数据怪癖&#xff0c;您可能希望在将数据提供给机器学习算法之前对其进行清理&#xff0c;并且发现了属性之间有趣的相关性&#xff0c…...

基于Python OpenCV的金铲铲自动进游戏、D牌...

基于Python OpenCV的金铲铲自动进游戏、D牌... 1. 自动点击进入游戏1.1 环境准备1.2 功能实现2. 自动D牌3. 游戏结束自动退1. 自动点击进入游戏 PS: 本测试只用于交流学习OpenCV的相关知识,不能用于商业用途,后果自负。 1.1 环境准备 需要金铲铲在win10的模拟器,我们这里选…...

c++中httplib使用

httplib文件链接:百度网盘 请输入提取码 提取码:kgnq json解析库:百度网盘 请输入提取码 提取码:oug0 一、获取token 打开postman, 在body这个参数中点击raw,输入用户名和密码 然后需要获取到域名和地址。 c++代码如下: #include "httplib.h" #in…...

Vite 的基本原理,和 webpack 在开发阶段的比较

目录 1&#xff0c;webpack 的流程2&#xff0c;Vite 的流程简单编译 3&#xff0c;总结 主要对比开发阶段。 1&#xff0c;webpack 的流程 开发阶段大致流程&#xff1a;指定一个入口文件&#xff0c;对相关的模块&#xff08;js css img 等&#xff09;先进行打包&#xff0…...

[开源]免费开源MES系统/可视化数字大屏/自动排班系统

开源系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、免费MES、免费智能制造系统、免费排产系统、免费排班系统、免费质检系统、免费生产计划系统。 万界星空开源MES制造执行系统的Java开源版本。开源mes系统包括系统管理…...

python如何使用gspread读取google在线excel数据?

一、背景 公司使用google在线excel管理测试用例&#xff0c;为了方便把手工测试用到的测试数据用来做自动化用例测试数据&#xff0c;所以就想使用python读取在线excel数据&#xff0c;通过数据驱动方式&#xff0c;完成自动化回归测试&#xff0c;提升手动复制&#xff0c;粘…...

线程同步——互斥量解锁、解锁

类似与进程间通信信号量的加锁解锁。 对互斥量进行加锁后&#xff0c;任何其他试图在此对互斥量加锁的线程都会被阻塞&#xff0c;直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程被阻塞&#xff0c;所有在该互斥锁上的阻塞线程都会变成可运行状态&#xff0c;第一个变…...

数据结构(c语言版) 顺序表

代码 #include <stdio.h> #include <stdlib.h>typedef int E; //这里我们的元素类型就用int为例吧&#xff0c;先起个别名//定义结构体 struct List{E * array;int capacity; //数组的容量int size; };//给结构体指针起别名 typedef struct List * ArrayLis…...

Springboot 集成 RocketMq(入门)

1.RocketMq安装部署 Linux 安装 RocketMq-CSDN博客 2.添加依赖包 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.3</version> </dependency> 3.配…...

Elasticsearch:ES|QL 中的数据丰富

在之前的文章 “Elasticsearch&#xff1a;ES|QL 查询语言简介”&#xff0c;我有介绍 ES|QL 的 ENRICH 处理命令。ES|QL ENRICH 处理命令在查询时将来自一个或多个源索引的数据与 Elasticsearch 丰富索引中找到的字段值组合相结合。这个有点类似于关系数据库查询中所使用的 jo…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...

小智AI+MCP

什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析&#xff1a;AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github&#xff1a;https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...