动态规划专项---最长上升子序列模型


文章目录

  • 怪盗基德的滑翔翼
  • 登山
  • 合唱队形
  • 友好城市
  • 最大上升子序列和
  • 拦截导弹
  • 导弹防御系统
  • 最长公共上升子序列

一、怪盗基德的滑翔翼OJ链接

       本题思路:本题是上升子序列模型中比较简单的模型,分别是从前往后和从后往前走一遍LIS即可。

#include <bits/stdc++.h>constexpr int N=110;int n;
int h[N];
int f[N];int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int T;std::cin>>T;while(T--){std::cin>>n;for(int i=1;i<=n;i++) std::cin>>h[i];int res=0;//正向求解LIS问题for(int i=1;i<=n;i++){f[i]=1;for(int j=1;j<i;j++)if(h[j]<h[i]) f[i]=std::max(f[i],f[j]+1);res=std::max(f[i],res);}memset(f,0,sizeof f);//这里需要将此时的f数组进行清零处理//反向求解LIS问题for(int i=n;i>=1;i--){f[i]=1;for(int j=n;j>i;j--)if(h[j]<h[i]) f[i]=std::max(f[i],f[j]+1);res=std::max(f[i],res);}std::cout<<res<<std::endl;}return 0;
}

二、登山OJ链接

        本题思路:状态表示f[i]表示以第 i个位置作为当前子序列的右端点的值,g[i]表示以第 i
个位置作为当前子序列的左端点的值。状态属性:f[i]求最长上升子序列的最多景点个数,g[i]求最长下降子序列的最多景点个数。状态计算:f[i]=max(f[i],f[j]+1)(1≤j<i≤n),g[i]=max(g[i],g[j]+1)(1≤i<j≤n)
求新数组最长上升子序列就是求原数组最长下降子序列答案表示:根据每一个点来划分:ans=max(包含 i的最长上升子序列 + 包含 i的最长下降子序列)所以 ans=max(f[i]+g[i]−1)。

#include <bits/stdc++.h>constexpr int N=1010;int n;
int h[N];
int f[N],g[N];//f用来表示上升子序列 g表示下降子序列int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);std::cin>>n;for(int i=1;i<=n;i++) std::cin>>h[i];for(int i=1;i<=n;i++){//求出上升子序列f[i]=1;for(int j=1;j<i;j++)if(h[j]<h[i])f[i]=std::max(f[i],f[j]+1);}for(int i=n;i>=1;i--){//求出下降子序列g[i]=1;for(int j=n;j>i;j--)if(h[j]<h[i])g[i]=std::max(g[i],g[j]+1);}int res=0;for(int i=1;i<=n;i++)res=std::max(res,f[i]+g[i]-1);std::cout<<res<<std::endl;return 0;
}

三、合唱队形OJ链接

        本题思路:本题与上面一题差不多。

#include <bits/stdc++.h>constexpr int N=1010;int n;
int h[N];
int f[N],g[N];int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);std::cin>>n;for(int i=1;i<=n;i++) std::cin>>h[i];for(int i=1;i<=n;i++){f[i]=1;for(int j=1;j<i;j++)if(h[j]<h[i])f[i]=std::max(f[i],f[j]+1);}for(int i=n;i>=1;i--){g[i]=1;for(int j=n;j>i;j--)if(h[j]<h[i])g[i]=std::max(g[i],g[j]+1);}int res=0;for(int i=1;i<=n;i++) res=std::max(res,f[i]+g[i]-1);std::cout<<n-res<<std::endl;return 0;
}

四、友好城市OJ链接

        本题思路:这里的我们可以先想想交叉和不交叉的情况下分别画出来的图是什么样子的。我们可以发现,在两座桥不交叉的情况下,有a1<a2,b1<b2,在两座桥相交的情况下,有a1<a2,b2<b1所以我们可以发现两桥是否交叉是可以用北岸城市编号的大小关系给反应出来的。所以我们的思路就可以转化为以南岸的城市编号为基准,把所有的城市对从小到大排序,从而得到关于北岸城市的一个数组。因为当bi<bj时能成功建一座桥,所以问题就转化成了求取这个数组的最长上升子序列。到此,我们对北方城市的数组做一次 LIS就可以得到答案了。

#include <bits/stdc++.h>#define x first
#define y secondtypedef std::pair<int, int> PII;
constexpr int N=5010;int n;
int f[N];
PII line[N];int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);std::cin>>n;for(int i=1;i<=n;i++)std::cin>>line[i].x>>line[i].y;std::sort(line+1,line+n+1);int res=0;for(int i=1;i<=n;i++){for(int j=0;j<i;j++)if(line[j].y<line[i].y)f[i]=std::max(f[i],f[j]+1);res=std::max(res,f[i]);}std::cout<<res<<std::endl;return 0;
}

五、最大上升子序列和OJ链接

六、拦截导弹OJ链接

七、导弹防御系统OJ链接

八、最长公共上升子序列OJ链接

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

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

相关文章

ARouter出现 there‘s no route matched in group问题排查

在使用ARouter时候会出现找不到映射路径的问题&#xff0c;这里给兄弟们总结下踩过的坑 所有用到的模块都要有填写依赖 android {defaultConfig {......javaCompileOptions {annotationProcessorOptions {arguments [AROUTER_MODULE_NAME: project.getName()]}}} } ... depe…

腾讯云轻量数据库性能如何?轻量数据库租用配置价格表

腾讯云轻量数据库测评&#xff0c;轻量数据库100%兼容MySQL 5.7和8.0&#xff0c;腾讯云提供1C1G20GB、1C1G40GB、1C2G80GB、2C4G120GB、2C8G240GB五种规格轻量数据库&#xff0c;腾讯云百科txybk.com分享腾讯云轻量数据库测评、轻量数据库详细介绍、特性、配置价格和常见问题解…

JavaScript的学习,就这一篇就OK了!(超详细)

目录 Day27 JavaScript(1) 1、JS的引入方式 2、ECMAScript基本语法 3、ECMAScript 基本数据类型​编辑 3.1 数字类型 3.2 字符串 3.3 布尔值 3.4 空值&#xff08;Undefined和Null&#xff09; 3.5 类型转换 3.6 原始值和引用值 4、运算符 5、流程控制语句 5.1 分…

【Android】Android Framework系列--CarUsbHandler源码分析

Android Framework系列–CarUsbHandler源码分析 本文基于Android12源码。 CarUsbHandler是Android Car提供的服务之一&#xff0c;其用车载USB连接的场景。 车载USB有其特殊应用场景&#xff0c;比如AndroidAuto、CarLife等。而Android的做法是在其原有的USB服务上&#xff0…

【信息安全】浅谈SQL注入攻击的概念、原理和防范措施:简单分析六种常见攻击方式

用户登录 在开发Web应用程序时&#xff0c;用户登录是一个非常常见的功能。然而&#xff0c;不安全的用户登录功能可能会导致安全漏洞&#xff0c;例如SQL注入和跨站脚本攻击。 SQL注入 SQL注入是一种常见的攻击技术&#xff0c;攻击者通过在用户输入的数据中插入恶意SQL代码…

Jmeter做接口测试

1.Jmeter的安装以及环境变量的配置 Jmeter是基于java语法开发的接口测试以及性能测试的工具。 jdk&#xff1a;17 (最新的Jeknins&#xff0c;只能支持到17) jmeter&#xff1a;5.6 官网&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 认识JMeter的目录&#xff1…

华为麒麟服务器--硬盘问题

记录以下今天处理的服务器&#xff1a; 情况说明&#xff1a;linux 系统&#xff0c;不知道什么原因系统就突然不能用了&#xff08;据说是前段时间断电来着&#xff0c;但是机房有应急电源&#xff09;。 系统环境&#xff1a; 服务器&#xff1a;华为RH2288H V3 服务器 服…

leetcode刷题日志-68.文本左右对齐

给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往每行中放置单词。必要时可…

C++学习笔记(11)——类,友元类、内部类、匿名对象、优化

系列文章目录 C学习笔记 C学习笔记&#xff08;1&#xff09;——C的诞生C学习笔记&#xff08;3&#xff09;——缺省函数与函数重载C学习笔记&#xff08;4&#xff09;——引用C学习笔记(5)——inline内联C学习笔记&#xff08;6&#xff09;——auto关键字C学习笔记&…

Python 自动化(十八)admin后台管理

admin后台管理 什么是admin后台管理 django提供了比较完善的后台数据库的接口&#xff0c;可供开发过程中调用和测试使用 django会搜集所有已注册的模型类&#xff0c;为这些模型类提供数据管理界面&#xff0c;供开发使用 admin配置步骤 创建后台管理账号 该账号为管理后…

[AutoSar]工程中的cpuload陷阱(三)测试

目录 关键词平台说明背景一、 测试结果对比1.1 不带cache1.2 带cache 二、小结 关键词 嵌入式、C语言、autosar 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 背景 接着工程中的cpuload陷阱&#xff08;二)中的描述…

边缘计算是如何为元宇宙提供动力的?

构建元宇宙虚拟世界并不简单&#xff0c;也并不便宜&#xff0c;但是还是有许多大型公司正在转移大量资源来开发他们的元宇宙业务&#xff0c;当然大部分企业注意力都围绕着 VR 耳机、AR 眼镜、触觉手套和其他沉浸式虚拟现实体验所需的可穿戴硬件。虽然这种沉浸式的体验是最终结…