今日总结2024/5/9

news/2024/5/21 0:08:43

今日复习了朴素LCS,学习了LCS优化,以及LCIS 最长上升公共子序列

P1439 最长公共子序列
题目描述

给出 1,2,…,𝑛 的两个排列 𝑃1​ 和 𝑃2​ ,求它们的最长公共子序列。

输入格式

第一行是一个数 𝑛。

接下来两行,每行为 n 个数,为自然数 1,2,…,n 的一个排列。

输出格式

一个数,即最长公共子序列的长度。

  • 对于 100% 的数据, 𝑛≤1e5。

由上述数据可知,朴素算法会被卡,因此要根据全排列性质进行优化,因为两个序列只是数的位置不同,因此可以用离散化方式将第一个序列映射成单调的1,2,3,4....n则只需要在第二个序列在此映射关系下的单调序列的最长长度即可,即可转换成LIS问题,LIS优化方法可以做到nlogn

#include <iostream>
using namespace std;
const int N=1e5+7;
int a[N],b[N],g[N],map[N],n;//f[i]表示长度位i结尾最小的值int main(){cin>>n;for(int i=0;i<n;i++) cin>>a[i],map[a[i]]=i;//离散化映射for(int i=0;i<n;i++) cin>>b[i];int len=0;for(int i=0;i<n;i++){int t=map[b[i]];int pos=lower_bound(g+1,g+len+1,t)-g;g[pos]=t;len=max(pos,len);}cout<<len;return 0;
}
Acwing 3510. 最长公共子序列

同理只需要把第二个序列在第一个序列中不存在的去掉即可

Acwing 272. 最长公共上升子序列

熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。

小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们研究最长公共上升子序列了。

小沐沐说,对于两个数列 A 和 B,如果它们都包含一段位置不一定连续的数,且数值是严格递增的,那么称这一段数是两个数列的公共上升子序列,而所有的公共上升子序列中最长的就是最长公共上升子序列了。

奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升子序列。

不过,只要告诉奶牛它的长度就可以了。

数列 A 和 B 的长度均不超过 3000。

输入格式

第一行包含一个整数 N,表示数列 A,B 的长度。

第二行包含 N 个整数,表示数列 A。

第三行包含 N 个整数,表示数列 B。

输出格式

输出一个整数,表示最长公共上升子序列的长度。

数据范围

1≤𝑁≤3000,序列中的数字均不超过 2^31−1。

输入样例:
4
2 2 1 3
2 1 2 3
输出样例:
2

朴素写法:

首先更据LIS,和最长公共子序列,可以将集合f[i,j]表示为由a的前i个,b的前j个且以b[j]结尾的公共上升子序列长度,属性为最大值

划分依据为a[i]是否被包含,不包含a[i]就是f[i-1,j]

包含a[i]则必然有a[i]=b[j]

可以将包含a[i]的情况按照序列倒数第二个数进行划分,为空(只有一个),为b[1------j-1]

将f[i,k]+1(以b[j]结尾的一个加上)取最大值即可

最后枚举f[n][k]枚举每个b[k]结尾的最长公共子序列长度取最大即可

#include <iostream>
#include <algorithm>
using namespace std;
const int N=3050;
int a[N],b[N],f[N][N];//f[i][j]表示以a中前i个,b中前j个且以b[j]结尾的公共子序列长度的最大值int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int j=1;j<=n;j++) cin>>b[j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){f[i][j]=f[i-1][j];if(a[i]==b[j]){f[i][j]=max(f[i][j],1);//若从上面继承的为0,就取空值1,表示一个元素for(int k=1;k<j;k++)if(b[k]<b[j])//注意用b[1到j-1]更新时要保证小于b[j]才能继承f[i][j]=max(f[i][j],f[i][k]+1);}}int res=0;for(int i=1;i<=n;i++) res=max(res,f[n][i]);cout<<res;return 0;
}

但是当有极限情况时,也就是3000个数每个都相同时,会跑满三重循环导致超时,因此要进行优化,因此把相等条件替换进if表达式,因此b[k]<a[i]与b[j]无关,只与j-1有关

因此用一个变量maxv在遍历前j-1时存最大值对代码做等价变形即可

#include <iostream>
#include <algorithm>
using namespace std;
const int N=3010;
int a[N],b[N],f[N][N];//f[i][j]表示以a中前i个,b中前j个且以b[j]结尾的公共子序列长度的最大值
int g[N][N];//满足b[j]<a[i]的f[i][j]+1的最大值int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int j=1;j<=n;j++) cin>>b[j];for(int i=1;i<=n;i++){int maxv=1;for(int j=1;j<=n;j++){f[i][j]=f[i-1][j];if(a[i]==b[j]) f[i][j]=max(f[i][j],maxv);if(b[j]<a[i]) maxv=max(maxv,f[i][j]+1);}}int res=0;for(int i=1;i<=n;i++) res=max(res,f[n][i]);cout<<res;return 0;
}


http://www.mrgr.cn/p/41401682

相关文章

锂电池恒流恒压CCCV充电模型MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; CCCV简介 CCCV充电过程是恒流充电&#xff08;CC&#xff09;和恒压充电&#xff08;CV&#xff09;的结合。在CC阶段对电池施加恒定电流&#xff0c;以获得更快的充电速度&#xff0c;此时电池电压持续升高…

用keras识别狗狗

一、需求场景 从照片从识别出狗狗 from keras.applications.resnet50 import ResNet50 from keras.preprocessing import image from keras.applications.resnet50 import preprocess_input, decode_predictions import numpy as np# 加载预训练的ResNet50模型 model ResNet5…

Kubernetes(K8s)的基础概念

目录 一、Kubernetes&#xff08;K8s&#xff09;概述 1、K8s是什么&#xff1f; 2、k8s的作用 3、k8s的功能 二、k8s的特性 ①弹性伸缩&#xff1a; ②自我修复&#xff1a; ③服务发现和负载均衡&#xff1a; ④自动发布&#xff08;默认滚动发布模式&#xff09;和…

asp.net朱勇项目个人博客(3)

引文:按照书上的项目&#xff0c;我们最后实现管理端的三个增删改查的功能即可,相对与三个增删改查&#xff0c;文章&#xff0c;分类和留言&#xff0c;这里我们所需要用的的关联的一个表就是文章表&#xff0c;因为文章表每一个文章的增加显示和修改都需要对应的一个分类&…

鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程

一个.c源文件编译的整个过程如图. 编译过程要经过&#xff1a;源文件 --> 预处理 --> 编译(cc1) --> 汇编器(as) --> 链接器(ld) --> 可执行文件(PE/ELF) GCC GCC&#xff08;GNU Compiler Collection&#xff0c;GNU编译器套件&#xff09;&#xff0c;官网:…

新火种AI|AI让大家都变“土”了!

作者&#xff1a;一号 编辑&#xff1a;美美 AI不仅要把人变“土”&#xff0c;还要把人变多样。 这个世界&#xff0c;终究是变“土”了。 今年五一假期&#xff0c;一个名为“Remini”的AI修图APP火遍了全网。注意&#xff0c;是Remini&#xff0c;而不是Redmi&#xff0…

nacos下载安装和nacos启动报错

nacos简介: Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您…

自动驾驶纵向控制算法

本文来源——b站忠厚老实的老王&#xff0c;链接&#xff1a;忠厚老实的老王投稿视频-忠厚老实的老王视频分享-哔哩哔哩视频 (bilibili.com)&#xff0c;侵删。 功率和转速之间的关系就是&#xff1a;功率P等于转矩M乘以转速ω。并不是油门越大加速度就越大。 发动机和电机的转…

宁波方太集团项目管理办公室负责人王博受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 宁波方太集团项目管理办公室负责人王博先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“系统性建设卓越的组织级项目管理体系”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1…

C# WinForm —— 12 ListBox绑定数据

ListBox加载大量数据时&#xff0c;避免窗体闪烁的方法&#xff1a; 在加载语句的前后分别加上 BeginUpdate()方法 和 EndUpdate()方法 指定一个集合为绑定的数据源 1. 首先&#xff0c;右键项目&#xff0c;添加类 2. 在新建的类文件中添加属性值信息 3. 构建初始化的对象…

【华为】IPSec VPN手动配置

【华为】IPSec VPN手动配置 拓扑配置ISP - 2AR1NAT - Easy IPIPSec VPN AR3NATIPsec VPN PC检验 配置文档AR1AR2 拓扑 配置 配置步骤 1、配置IP地址&#xff0c;ISP 路由器用 Lo0 模拟互联网 2、漳州和福州两个出口路由器配置默认路由指向ISP路由器 3、进行 IPsec VPN配置&…

【C++】C++11--- 列表初始化|关键字

目录 前言 列表初始化 创建对象时的列表初始化 单参数隐式类型转换 多参数的隐式类型转换 new表达式中使用列表初始化 列表初始化适用于STL 容器 模板类initializer_list 关键字auto 关键字decltype 关键字nullptr 前言 C标准10年磨一剑&#xff0c;第二个真正意义上…

【强训笔记】day16

NO.1 代码实现&#xff1a; class StringFormat { public:string formatString(string A, int n, vector<char> arg, int m) {string ret;int j0;for(int i0;i<n;i){if(A[i]%){if(i1<n&&A[i1]s){retarg[j];i;}else {retA[i];}}else {retA[i];}}while(j&l…

Golang:deepcopy深拷贝工具库

Golang:deepcopy深拷贝工具库 原创 吃个大西瓜 Coding Big Tree 2024-05-02 08:30 云南 听全文Deep copy things译文:事物的深度复制文档github https://github.com/mohae/deepcopy pkg.go https://pkg.go.dev/github.com/mohae/deepcopy安装 go get github.com/mohae/deepco…

SpringCloud微服务之Eureka、Ribbon、Nacos详解

SpringCloud微服务之Eureka、Ribbon、Nacos详解 1、认识微服务1.1、单体架构1.2、分布式架构1.3、微服务1.4、SpringCloud 2、服务拆分与远程调用2.1、服务拆分的原则2.2、服务拆分示例2.2、提供者与消费者 3、Eureka注册中心3.1、Eureka的结构和作用3.2、搭建eureka-server3.2…

Sealos急速部署生产用k8s集群

最近一段时间部署k8s全部使用sealos了&#xff0c;整体使用感觉良好&#xff0c;基本没有什么坑。推荐给大家。 使用 Sealos&#xff0c;可以安装一个不包含任何组件的裸 Kubernetes 集群。 最大的好处是提供 99 年证书&#xff0c;用到我跑路是足够了。不用像之前kubeadm安装…

小程序引入 Vant Weapp 极简教程

一切以 Vant Weapp 官方文档 为准 Vant Weapp 官方文档 - 快速入手 1. 安装nodejs 前往官网下载安装即可 nodejs官网 安装好后 在命令行&#xff08;winr&#xff0c;输入cmd&#xff09;输入 node -v若显示版本信息&#xff0c;即为安装成功 2. 在 小程序根目录 命令行/终端…

毕业设计:《基于 Prometheus 和 ELK 的基础平台监控系统设计与实现》

前言 《基于 Prometheus 和 ELK 的基础平台监控系统设计与实现》&#xff0c;这是我在本科阶段的毕业设计&#xff0c;通过引入 Prometheus 和 ELK 架构实现企业对指标与日志的全方位监控。并且基于云原生&#xff0c;使用容器化持续集成部署的开发方式&#xff0c;通过 Sprin…

95、动态规划-编辑距离

递归暴力解法 递归方法的基本思想是考虑最后一个字符的操作&#xff0c;然后根据这些操作递归处理子问题。 递归函数定义&#xff1a;定义一个递归函数 minDistance(i, j)&#xff0c;表示将 word1 的前 i 个字符转换成 word2 的前 j 个字符所需的最小操作数。 递归终止条件…

day1_slidingWindow

一、滑动窗口模板 // 注意&#xff1a;java 代码由 chatGPT&#x1f916; 根据我的 cpp 代码翻译&#xff0c;旨在帮助不同背景的读者理解算法逻辑。 // 本代码不保证正确性&#xff0c;仅供参考。如有疑惑&#xff0c;可以参照我写的 cpp 代码对比查看。import java.util.Has…