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

K-01BFS(2023河南萌新联赛第(五)场:郑州轻工业大学)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

思路:

直接枚举这个图中的拐点

这个拐点是经过左右平移到上下平移或者上下平移到左右平移

假设这个点事左到右后然后再从下到上

左到右就相当于走了个最长上升子序列,然后再从下到上

从下到上的过程你可以反过来看,就是从上走到下,就相当从上到下走了个最长下降子序列

然后最长上升/下降子序列可以用dp+二分来求

按题解的话来说就是

预处理出对于每个单元格四个方向上最多跳多少个单元格可以跳到当前单元格(最长上升子序列),以及从当前单元格跳出最多能跳多少个单元格(最长下降子序列)

-----------------------------------

下面是最长上升子序列的代码

memset(q,0x3f,sizeof q);q[0]=-inf;int maxx=0;
for(int i=0;i<n;i++){int pos=lower_bound(q,q+n,a[i])-q-1;q[pos+1]=a[i];maxx=max(maxx,pos+1);}

最长下降子序列代码

for (int i = 0; i < n; i++) {cin >> v[i];}dp.push_back(v[0]);for (int i = 1; i < n; i++) {if (v[i] < dp.back()) dp.push_back(v[i]);else {int l = 0, r = dp.size()-1;while (l < r) {int m = l + (r - l) / 2;if (v[i] < dp[m])l = m + 1;else r = m;}dp[l] = v[i];}

-------------------

经过每个点4个方向的预处理

#include<iostream>
#include<algorithm>
#include<numeric>//accumulate(be,en,0)
#include<cstring>//rfind("string"),s.find(string,begin)!=s.npos,find_first _of(),find_last_of()
#include<string>//to_string(value),s.substr(int begin, int length);
#include<cstdio>
#include<cmath>
#include<vector>//res.erase(unique(res.begin(), res.end()), res.end()),reverse(q.begin(),q.end()),vector<int>().swap(at[mx])
#include<queue>//priority_queue(big)  /priority_queue<int, vector<int>, greater<int>> q(small)
#include<stack>
//#include<map>//unordered_map
#include<set>//iterator,insert(),erase(),lower(>=)/upper_bound(>)(value)/find()return end()
#include<unordered_map>
#include<unordered_set>
#include<bitset>//size,count(size of 1),reset(to 0),any(have 1?)
//#include<ext/pb_ds/assoc_container.hpp>//gp_hash_table
//#include<ext/pb_ds/hash_policy.hpp>
//using namespace __gnu_pbds;
#define int long long//__int128 2^127-1(GCC)
#define PII pair<int,int>
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f3f, N = 1e5 + 5, mod = 1e9 + 7;
signed main() {ios_base::sync_with_stdio(0);cin.tie(0), cout.tie(0);int T;cin >> T;while (T--) {int n, m;cin >> n >> m;vector<vector<int>>q(n + 5, vector<int>(m + 5));//存储原来矩阵vector<vector<int>>q2(n + 5, vector<int>(m + 5));//存储第一次上下移动的矩阵的最大值vector<vector<int>>q1(n + 5, vector<int>(m + 5));//存储第一次左右移动的矩阵的最大值vector<vector<int>>q3(n + 5, vector<int>(m + 5));//存储第二次上下移动的矩阵的最大值vector<vector<int>>q4(n + 5, vector<int>(m + 5));//存储第二次左右移动的矩阵的最大值for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> q[i][j];}}vector<int>w, tmp(m + 5), tmp2(n + 5);for (int i = 1; i < m + 5; i++) tmp[i] = inf;for (int i = 1; i < n + 5; i++) tmp2[i] = inf;for (int i = 1; i <= n; i++) {//求每一行从左到右的最长上升子序列w = tmp;w[0] = -inf;for (int j = 1; j <= m; j++) {int pos = lower_bound(w.begin(), w.end(), q[i][j]) - w.begin() - 1;w[pos + 1] = q[i][j];q1[i][j] = pos + 1;}}for (int i = 1; i <= n; i++) {w = tmp;w[0] = -inf;for (int j = m; j >= 1; j--) {int pos = lower_bound(w.begin(), w.end(), q[i][j]) - w.begin() - 1;w[pos + 1] = q[i][j];q1[i][j] = max(q1[i][j], pos + 1);}}for (int i = 1; i <= m; i++) {//每一行从右到左 的上升子序列(下面同理)w = tmp2;w[0] = -inf;for (int j = 1; j <= n; j++) {int pos = lower_bound(w.begin(), w.end(), q[j][i]) - w.begin() - 1;w[pos + 1] = q[j][i];q2[j][i] = pos + 1;}}for (int i = 1; i <= m; i++) {w = tmp2;w[0] = -inf;for (int j = n; j >= 1; j--) {int pos = lower_bound(w.begin(), w.end(), q[j][i]) - w.begin() - 1;w[pos + 1] = q[j][i];q2[j][i] = max(q2[j][i], pos + 1);}}//------------------------for (int i = 1; i <= n; i++) {//每一行从左到右的下降子序列q3[i][1] = 1;vector<int>dp;dp.push_back(q[i][1]);for (int j = 2; j <= m; j++) {if (q[i][j] < dp.back()) {dp.push_back(q[i][j]); q3[i][j] = dp.size();}else {int l = 0, r = dp.size() - 1;while (l < r) {int mid = l + (r - l) / 2;if (q[i][j] < dp[mid]) l = mid + 1;else r = mid;}q3[i][j] = l + 1;dp[l] = q[i][j];}}}for (int i = 1; i <= n; i++) {vector<int>dp;dp.push_back(q[i][m]);for (int j = m - 1; j >= 1; j--) {if (q[i][j] < dp.back()) {dp.push_back(q[i][j]); q3[i][j] = max(q3[i][j], (int)dp.size());}else {int l = 0, r = dp.size() - 1;while (l < r) {int mid = l + (r - l) / 2;if (q[i][j] < dp[mid]) l = mid + 1;else r = mid;}q3[i][j] = max(q3[i][j], l + 1);dp[l] = q[i][j];}}}for (int i = 1; i <= m; i++) {q4[1][i] = 1;vector<int>dp;dp.push_back(q[1][i]);for (int j = 2; j <= n; j++) {if (q[j][i] < dp.back()) {dp.push_back(q[j][i]); q4[j][i] = dp.size();}else {int l = 0, r = dp.size() - 1;while (l < r) {int mid = l + (r - l) / 2;if (q[j][i] < dp[mid]) l = mid + 1;else r = mid;}q4[j][i] = l + 1;dp[l] = q[j][i];}}}for (int i = 1; i <= m; i++) {vector<int>dp;dp.push_back(q[n][i]);for (int j = n - 1; j >= 1; j--) {if (q[j][i] < dp.back()) {dp.push_back(q[j][i]); q4[j][i] = max(q4[j][i], (int)dp.size());}else {int l = 0, r = dp.size() - 1;while (l < r) {int mid = l + (r - l) / 2;if (q[j][i] < dp[mid]) l = mid + 1;else r = mid;}q4[j][i] = max(q4[j][i], l + 1);dp[l] = q[j][i];}}}int maxx = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {maxx = max({ maxx,q1[i][j] + q4[i][j],q2[i][j] + q3[i][j] });
//第一次上下+第二次左右,第一次左右+第二次上下}}cout << maxx - 1 << '\n';}
}

相关文章:

K-01BFS(2023河南萌新联赛第(五)场:郑州轻工业大学)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 思路&#xff1a; 直接枚举这个图中的拐点 这个拐点是经过左右平移到上下平移或者上下平移到左右平移 假设这个点事左到右后然后再从下到上 左到右就相当于走了个最长上升子序列&#xff0…...

CSP复习每日一题(四)

树的重心 给定一颗树&#xff0c;树中包含 n n n 个结点&#xff08;编号 1 ∼ n 1∼n 1∼n&#xff09;和 n − 1 n−1 n−1条无向边。请你找到树的重心&#xff0c;并输出将重心删除后&#xff0c;剩余各个连通块中点数的最大值。 重心定义&#xff1a; 重心是指树中的一…...

dubbo之整合SpringBoot

目录 zookeeper安装 1.拉取ZooKeeper镜像 2.新建文件夹 3.挂载本地文件夹并启动服务 4.查看容器 5.进入容器&#xff08;zookeeper&#xff09; Dubbo Admin安装 1.下载dubbo-admin 2.zip包解压 3.修改配置文件 4.打包项目 5.启动jar 6.访问 构建项目 api模块 1.创建…...

UE 5 GAS 在项目中处理AttributeSet相关

这一篇文章是个人的实战经验记录&#xff0c;如果对基础性的内容不了解的&#xff0c;可以看我前面一篇文章对基础的概念以及内容的讲解。 设置AttributeSet 使用GAS之前&#xff0c;首先需要设置参数集AS&#xff0c;这个是用于同步的一些参数&#xff0c;至于如何设置GAS&a…...

JDBC数据库连接

目录 引言 一&#xff0c;基本概念 二&#xff0c;常用操作步骤 三&#xff0c;连接操作 引言 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API&#xff0c;可以为多种 关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口…...

gitee分支合并

合并dev分支到master&#xff08;合并到主分支&#xff09; git checkout master git merge dev //这里的dev表示你的分支名称 git push //推送到远程仓库 效果如下图 不报错就表示推送成功了&#xff0c;希望能帮助各位小伙伴...

Python小白入门:文件、异常处理和json格式存储数据

这里写自定义目录标题 所用资料 一、从文件中读取数据1.1 读取整个文件1.2 文件路径1.3 逐行读取1.4 创建一个包含文件各行内容的列表1.5 使用文件的内容1.6 包含一百万位的大型文件1.7 圆周率值中包含你的生日吗练习题 二、写入文件2.1 写入空文件2.2 写入多行2.3 附加到文件练…...

16bit、8 通道、500kSPS、 SAR 型 ADC——MS5188N

MS5188N 是 8 通道、 16bit 、电荷再分配逐次逼近型模数 转换器&#xff0c;采用单电源供电。 MS5188N 拥有多通道、低功耗数据采集系统所需的所有 组成部分&#xff0c;包括&#xff1a;无失码的真 16 位 SAR ADC &#xff1b;用于将输入配 置为单端输入&#xff0…...

Chapter 12: Regular expressions | Python for Everybody 讲义笔记_En

文章目录 Python for Everybody课程简介Regular ExpressionsRegular ExpressionsCharacter matching in regular expressionsExtracting data using regular expressionsCombining searching and extractingEscape characterSummaryBonus section for Unix / Linux usersDebugg…...

Android javaMail mergeDebugJavaResource FAILED解决

Java mail 引入这两个jar之后 implementation com.sun.mail:android-mail:1.6.7implementation com.sun.mail:android-activation:1.6.7build直接报错 > Task :app:mergeDebugJavaResource FAILED Execution failed for task :app:mergeDebugJavaResource. > A failure o…...

【ArcGIS Pro二次开发】(57):地图系列

在ArcGIS Pro中&#xff0c;有一个地图系列&#xff0c;可以在一个布局中导出多个地图。 在SDK中为ArcGIS.Desktop.layout.MapSeries类和映射系列导出选项&#xff0c;可以以支持多页导出。 MapSeries类提供了一个静态CreateSpatialMapSeries方法&#xff0c;该方法使用指定的…...

秋招打卡015(20230811)

文章目录 前言一、今天学习了什么&#xff1f;二、动态规划之股票问题1、总结2、题目 三、SQL总结 前言 提示&#xff1a;这里为每天自己的学习内容心情总结&#xff1b; Learn By Doing&#xff0c;Now or Never&#xff0c;Writing is organized thinking. 提示&#xff1a…...

如何使用Word转PDF转换器在线工具?在线Word转PDF使用方法

Word转PDF转换器在线&#xff0c;是一种方便快捷的工具&#xff0c;可帮助您在不需要下载任何软件的情况下完成此任务。无论您是需要在工作中共享文档&#xff0c;还是将文件以PDF格式保存以确保格式不变&#xff0c;都可以依靠这款在线工具轻松完成转换。那么如何使用Word转PD…...

自然语言处理从入门到应用——LangChain:记忆(Memory)-[记忆的类型Ⅰ]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 会话缓存记忆ConversationBufferMemory 本节将介绍如何使用对话缓存记忆ConversationBufferMemory。这种记忆方式允许存储消息&#xff0c;并将消息提取到一个变量中&#xff0c;我们首先将其提取为字符串&#xff1a…...

Camunda 7.x 系列【7】Spring Boot 集成 Camunda 7.19

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2. Camunda Platform Run3. Spring Boot 版本兼容性4. 集成 Spring Boot5. 启动项目…...

24华东交通软件工程837考研题库

1&#xff0e;Jackson设计方法是由英国的M&#xff0e;Jackson所提出的。它是一种面向( )的软件设 计方法。 A&#xff0e;对象 B&#xff0e;数据流 C&#xff0e;数据结构 D&#xff0e;控制结构 答案:C 2&#xff0e;软件设计中&#xff0c;Jackson方法是一种面向…...

nginx 以及nginx优化

目录 nginx功能介绍 静态文件服务 反向代理 动态内容处理 SSL/TLS 加密支持 虚拟主机支持 URL 重写和重定向 缓存机制 日志记录 可扩展性和灵活性 nginx的主要应用场景 nginx常用命令 nginx另外一种安装方式 nginx常用的信号符&#xff1a; nginx配置文件详解 n…...

cesium学习记录04-坐标系

一、地理坐标系和投影坐标系的关系 地理坐标系 (Geographic Coordinate System, GCS) 定义&#xff1a;地理坐标系是一个基于三维地球表面的坐标系统。它使用经度和纬度来表示地点的位置。 特点&#xff1a; 使用经纬度来定义位置。 基于特定的地球参考椭球体。 适用于全球范…...

P5737 【深基7.例3】闰年展示

题目描述 输入 x , y x,y x,y&#xff0c;输出 [ x , y ] [x,y] [x,y] 区间中闰年个数&#xff0c;并在下一行输出所有闰年年份数字&#xff0c;使用空格隔开。 输入格式 输入两个正整数 x , y x,y x,y&#xff0c;以空格隔开。 输出格式 第一行输出一个正整数&#xf…...

Nacos的安装使用教程Linux

在 Linux 操作系统上安装和使用 Nacos 与 Windows 类似&#xff0c;以下是详细的步骤教程。我们将使用 Nacos 的 Standalone 模式进行安装和使用。请注意&#xff0c;对于生产环境&#xff0c;建议使用集群模式来实现高可用性和可扩展性。 步骤 1&#xff1a;准备环境 Java 安…...

华硕笔记本的“瘦身“秘籍:3分钟让G-Helper成为你的性能管家

华硕笔记本的"瘦身"秘籍&#xff1a;3分钟让G-Helper成为你的性能管家 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, …...

AD9361的LVDS接口到底能跑多快?实测数据速率与射频带宽的权衡指南

AD9361的LVDS接口极限性能解析&#xff1a;从理论到实践的全面指南 在无线通信系统设计中&#xff0c;AD9361作为一款高度集成的射频收发器&#xff0c;其数字接口性能直接影响整个系统的带宽上限和信号质量。本文将深入剖析AD9361在LVDS模式下的性能边界&#xff0c;通过实测数…...

新手避坑指南:ABB机器人工件坐标系标定,这3个点千万别标错(RobotStudio实操)

ABB机器人工件坐标系标定避坑实战&#xff1a;三点法操作细节全解析 在工业机器人应用领域&#xff0c;工件坐标系的准确标定直接决定了后续所有运动轨迹的精度。许多新手工程师在RobotStudio环境中进行三点法标定时&#xff0c;常常因为几个关键点的选择不当或TCP姿态控制失误…...

用Python和akshare库5分钟搞定LOF基金实时数据抓取与CSV保存(保姆级教程)

零基础Python实战&#xff1a;5分钟自动化获取LOF基金行情数据 最近两年&#xff0c;越来越多的个人投资者开始关注LOF基金的投资机会。这类基金既能在场内像股票一样交易&#xff0c;又能通过场外渠道申购赎回&#xff0c;流动性优势明显。但很多新手在跟踪LOF基金行情时&…...

EdgeRemover:Windows系统Edge浏览器自动化管理终极方案

EdgeRemover&#xff1a;Windows系统Edge浏览器自动化管理终极方案 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover Edg…...

DiP框架:像素空间扩散模型的高效图像生成技术

1. DiP框架&#xff1a;像素空间扩散模型的技术突破在计算机视觉领域&#xff0c;扩散模型已经成为图像生成的新标杆&#xff0c;但其计算效率与生成质量之间的矛盾始终是制约其广泛应用的关键瓶颈。传统潜在扩散模型(LDMs)通过VAE压缩图像到潜在空间确实降低了计算负担&#x…...

基于Jina与KaibanJS的智能网页内容提取技术

1. 项目概述在当今数据驱动的互联网环境中&#xff0c;智能化的网页内容提取技术正变得越来越重要。这个项目展示了一种创新的方法&#xff0c;通过结合Jina的URL转Markdown工具与KaibanJS框架&#xff0c;构建了一个能够自动理解网页结构并提取关键信息的AI代理系统。我最近在…...

告别“画饼”:PLUTO如何用对比学习让自动驾驶规划更像老司机?

PLUTO框架&#xff1a;用对比学习重塑自动驾驶决策逻辑 1. 自动驾驶规划的技术演进困境 当特斯拉车辆在十字路口突然急刹&#xff0c;或Waymo无人车在无保护左转时犹豫不决&#xff0c;这些现象揭示了当前自动驾驶规划系统的根本性挑战——如何让机器理解驾驶场景中的因果逻辑。…...

高级PCB封装设计:别再堆工艺,这4项技术才是量产关键

不少采购与项目经理发现&#xff1a;同样的高端芯片&#xff0c;有的厂一次打样成功、量产良率 99.5%&#xff0c;有的厂反复改版、良率不足 90%&#xff0c;交期一拖再拖。问题不在设备精度&#xff0c;而在高级 PCB 封装设计技术是否真正落地。很多团队把 “高级” 等同于 HD…...

Windchill生命周期状态客制化踩坑实录:从RB文件修改到服务重启的全流程避坑指南

Windchill生命周期状态客制化实战&#xff1a;从编码到部署的完整避坑手册 在PLM系统实施过程中&#xff0c;Windchill的生命周期管理功能是企业产品数据流转的核心枢纽。最近接手的一个汽车零部件项目让我深刻体会到&#xff0c;状态客制化这个看似简单的操作&#xff0c;实则…...