备战蓝桥杯---动态规划之悬线法

Em...属于一知道就会,不知道的话比较难想。

我们先看题:

我们不妨把1抽象成一个平面上的点,因此可以变成这一幅图:

我们假设每一个点被向上牵拉了一根线:

显然,每一条悬线都有可能成为边界限制,我们确定一条悬线,乘上悬线最左可到的+最右可到的距离即可。

首先,对于上下边界的悬线,我们记h[i][j]为(i,j)的悬线长度,易得方程:

h[i][j]=h[i-1][j]+1(a[i][j]=0)或者=0(a[i][j]=1).

我们再维护向左的长度。

我们记l[i][j]表示向左最远.l[i][j]=l[i][j-1]+1(a[i][j]=0)/0(a[i][j]=1)

我们记L[i][j]表示(i,j)这条悬线向左最远。

L[i][j]=min(L[i-1][j],l[i][j]).

向右同理。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int l[100][100],r[100][100],h[100][100],n,a[90][90];
int main(){cin>>n;int ans=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>a[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[i][j]==1){h[i][j]=0;l[i][j]=0;}else{h[i][j]=h[i-1][j]+1;l[i][j]=l[i][j-1]+1;}}for(int j=n;j>=1;j--){if(a[i][j]==1){r[i][j]=0;}else r[i][j]=r[i][j+1]+1;}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(h[i][j]>=2){//注意为2,若为1时会把上面的0带下来,而事实上1的值不用改l[i][j]=min(l[i][j],l[i-1][j]);r[i][j]=min(r[i][j],r[i-1][j]);}ans=max(ans,(r[i][j]+l[i][j]-1)*h[i][j]);}}cout<<ans;
} 

那么如果要求是正方形呢?

很简单,我们只要把h[i][j]与r[i][j]+l[i][j]-1取min并平方即可。

我们来看一个变形题吧:

这里有两种方法:

1.我们还是用悬线,只不过转移条件需要修改(与自己颜色不同时转移)

2.我们先进行染色操作,我们按照国际象棋去染色,我们把国际象棋为1的位置进行颠倒。1变成0,0变成1,我们再求其中的全0/1最大子矩形即可(我们反着看,把全0/1的恢复一下不就是了吗)

下面给出法2的AC代码:

#include<bits/stdc++.h>
using namespace std;
int l[2010][2010],r[2010][2010],h[2100][2010],n,m,a[2010][2010];
int l1[2010][2010],r1[2010][2010],h1[2100][2010];
int main(){cin>>n>>m;int ans0=0,ans1=0,ans00=0,ans11=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);}}int cnt=1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(j%2==cnt) a[i][j]=1-a[i][j];}cnt=1-cnt;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]==1){h[i][j]=0;l[i][j]=0;}else{h[i][j]=h[i-1][j]+1;l[i][j]=l[i][j-1]+1;}}for(int j=m;j>=1;j--){if(a[i][j]==1){r[i][j]=0;}else r[i][j]=r[i][j+1]+1;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(h[i][j]>=2){l[i][j]=min(l[i][j],l[i-1][j]);r[i][j]=min(r[i][j],r[i-1][j]);}ans0=max(ans0,(r[i][j]+l[i][j]-1)*h[i][j]);ans00=max(ans00,min(r[i][j]+l[i][j]-1,h[i][j])*min(r[i][j]+l[i][j]-1,h[i][j]));}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]==0){h1[i][j]=0;l1[i][j]=0;}else{h1[i][j]=h1[i-1][j]+1;l1[i][j]=l1[i][j-1]+1;}}for(int j=m;j>=1;j--){if(a[i][j]==0){r1[i][j]=0;}else r1[i][j]=r1[i][j+1]+1;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(h1[i][j]>=2){l1[i][j]=min(l1[i][j],l1[i-1][j]);r1[i][j]=min(r1[i][j],r1[i-1][j]);}ans1=max(ans1,(r1[i][j]+l1[i][j]-1)*h1[i][j]);ans11=max(ans11,min(r1[i][j]+l1[i][j]-1,h1[i][j])*min(r1[i][j]+l1[i][j]-1,h1[i][j]));}}cout<<max(ans00,ans11)<<endl;cout<<max(ans0,ans1);
} 

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

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

相关文章

Bulingbuling - 《历史的教训》 [ The Lessons of History ]

《历史的教训》 两位当代最伟大思想家的著名论文集&#xff0c;汇集了 5000 多年的历史 作者&#xff1a;威尔-杜兰特和阿里尔-杜兰特 The Lessons of History The celebrated collection of essays compiling over 5,000 years of history by two of the greatest thinkers …

Spring Boot项目中不使用@RequestMapping相关注解,如何动态发布自定义URL路径

一、前言 在Spring Boot项目开发过程中&#xff0c;对于接口API发布URL访问路径&#xff0c;一般都是在类上标识RestController或者Controller注解&#xff0c;然后在方法上标识RequestMapping相关注解&#xff0c;比如&#xff1a;PostMapping、GetMapping注解&#xff0c;通…

Siamrpn++论文中文翻译(详细!)

SiamRPN: Evolution of Siamese Visual Tracking with Very Deep Networks SiamRPN&#xff1a;具有非常深度网络的Siamese视觉跟踪的进化 【siamrpn论文地址】 https://arxiv.org/abs/1812.11703 摘要 基于Siamese网络的跟踪器将跟踪表示为目标模板和搜索区域之间的卷积特征…

【STA】多场景时序检查学习记录

单周期路径 建立时间时序检查 在时钟的有效沿到达触发器之前&#xff0c;数据应在一定时间内保持稳定&#xff0c;这段时间即触发器的建立 时间。满足建立时间要求将确保数据可靠地被捕获到触发器中。 建立时间检查是从发起触发器中时钟的第一个有效沿到捕获触发器中时钟后面…

基于springboot+vue的社区医院管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

chatgpt-3的文章生成器有哪些?可以批量生成文章的生成器

GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;作为人工智能领域的一项重大突破&#xff0c;开启了新一代的文本生成技术。同时市面上也涌现出了一些GPT-3文章生成器&#xff0c;为用户提供了快速、高效地生成各种类型文章的工具。本文将介绍一些中国的GP…

python笔记_程序流程控制

A&#xff0c;顺序控制 程序从上到下逐行执行 python定义变量时&#xff0c;会合法地向前引用 age 1 age2 age 1 age2 age 1 age 1 ——>错误&#xff0c;age应在age2之前 B&#xff0c;分支控制 1&#xff0c;单分支if 语法 if 条件表达式 &#xff1a; 代码块 说明…

数字化转型导师坚鹏:证券公司数字化思维升级之道

证券公司数字化思维升级之道 ——数字化思维之六脉神剑 课程背景&#xff1a; 很多证券公司存在以下问题&#xff1a; 不知道数字化转型如何改变思维模式&#xff1f; 不清楚需要建立什么样的数字化思维&#xff1f; 不知道如何开展数字化思维提升工作&#xff1f; 课…

Redis之十:Spring Data Redis --- CrudRepository方式

SpringData Redis CrudRepository方式 Spring Data Redis 的 CrudRepository 是 Spring Data 框架中用于提供基础 CRUD&#xff08;创建、读取、更新和删除&#xff09;操作的一个接口。在与 Redis 集成时&#xff0c;尽管 Redis 是一个键值存储系统&#xff0c;并没有像关系型…

关于福彩历史数据采集器和体彩历史数据采集器的下载安装说明

前段时间因为研究基于人工神经网络&#xff08;深度学习&#xff0c;所谓的“AI”算法&#xff09;对3D开奖数据进行预测&#xff0c;开发了两款浏览器插件----“福彩历史数据采集器”和“体彩历史数据采集器”。之所以开发这两款插件&#xff0c;是因为不管是基于什么样的方式…

【QT+QGIS跨平台编译】之六十三:【QGIS_CORE跨平台编译】—【错误处理:未定义的类QgsMapLayer - QgsMapLayerModel】

文章目录 一、未定义的类QgsMapLayer二、解决办法 一、未定义的类QgsMapLayer 报错&#xff1a; 二、解决办法 QgsMapLayerModel.h文件中 ①第27行修改为&#xff1a; #include "QgsMapLayer.h" ②第23行增加&#xff1a; #include <QPointer>

Github 2024-03-03 开源项目日报Top9

根据Github Trendings的统计&#xff0c;今日(2024-03-03统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量非开发语言项目4Rust项目1C项目1Jupyter Notebook项目1Python项目1Shell项目1 任天堂Switch模拟器yuzu&#x…

编写dockerfile挂载卷

编写dockerfile文件 [rootwq docker-test-volume]# vim dockerfile1 [rootwq docker-test-volume]# cat dockerfile1 FROM centosVOLUME ["volume01","volume02"]CMD echo "------end------" CMD /bin/bash [rootwq docker-test-volume]#使用do…

leetcode:51.N皇后(复习)

题目理解&#xff1a;&#xff08;回溯算法&#xff09; 树形结构——层数代表行数&#xff0c;递归的深度就是总行数。 代码实现&#xff1a;

手写 Attention 迷你LLaMa2——LLM实战

https://github.com/Yuezhengrong/Implement-Attention-TinyLLaMa-from-scratch 1. Attention 1.1 Attention 灵魂10问 你怎么理解Attention&#xff1f; Scaled Dot-Product Attention中的Scaled&#xff1a; 1 d k \frac{1}{\sqrt{d_k}} dk​ ​1​ 的目的是调节内积&…

金属3D打印新材料崭露头角,性能卓越引领行业新潮流

在3D打印模具制造领域&#xff0c;材料的选择对最终产品的性能有着至关重要的影响。随着技术的不断进步&#xff0c;金属3D打印材料正迅速发展&#xff0c;展现出强大的竞争力和创新潜力。其中&#xff0c;3D打印企业毅速推出的多款不锈钢粉末材料&#xff0c;如EM191、EM191S、…

VMware Workstation Pro 17 虚拟机软件安装教程

VMware软件介绍 VMware Workstation是一款功能强大的桌面虚拟计算机软件&#xff0c;提供用户可在宿主机操作系统上同时运行不同的操作系统(虚拟化技术)&#xff0c;所运行的操作系统可方便的进行复制和移动&#xff0c;突破传统架构的限制。本文将以VMware Workstation Pro 1…

使用lnmp环境部署laravel框架需要注意的点

1&#xff0c;上传项目文件后&#xff0c;需要chmod -R 777 storage授予文件权限&#xff0c;不然会报错file_put_contents(/): failed to open stream: Permission denied。 如果后面还是报错没有权限的话&#xff0c;就执行ps -ef |grep php查询php运行用户。然后执行chown …

2024真正有效的苹果mac电脑清理工具CleanMyMac X

一、前言 对于Mac用户来说&#xff0c;电脑卡顿、运行缓慢无疑是一件令人头疼的事情。而市面上的清理软件又五花八门&#xff0c;效果参差不齐&#xff0c;如何才能找到一款真正有效的清理工具呢&#xff1f;今天&#xff0c;我们为大家推荐一款实力派电脑清理软件——CleanMy…

【双指针】删除有序数组中重复元素,双指针原地修改数组

删除有序数组中重复元素 链接 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-duplicates-from-sorted-array/…