最长上升子序列(c++图文详解)

article/2025/9/20 17:36:57

这题思路是这样,假设这个序列长度为n,存在数组a中,maxlen[i]表示以第i个数为终点的最长上升子序列的长度,它被初始化为1,因为一开始单个字符的最长上升子序列都是1(它自己),我们先用一个循环i遍历这个序列,i从2(序列的第2个字符)开始一直加1加到n,表示求以第i个数为终点的最长上升子序列的长度,然后同时在这个循环下再来一个循环j,j从1开始加1一直加到i-1为止,表示以第j个数为终点的最长上升子序列。只要出现a[i]>a[j]的情况,maxlen[i]=max(maxlen[i],maxlen[j]+1),首先看maxlen[j]+1,因为a[i]>a[j]了,说明以第j个数为终点的最长上升子序列后面又多了一位比这个最长上升子序列大的,也就是a[i],这个序列变成以a[i]为终点的了,所以长度要加1,注意j的范围是(1,i-1),所以以第i个数为终点的最长上升子序列的长度至少是maxlen[j]+1,再跟maxlen[i]比较,因为maxlen[i]通过更新是有可能比maxlen[j]+1大的。

我们用图来表示这个解法,以题目例子的序列来说:

初始时单个字符的最长上升子序列是它本身,为1:

第1次i从2(对应数字7)开始,所以j从1到i-1也就是1 (对应数字1),7>1,我们发现a[i]>a[j]了,所以maxlen[i]=max(maxlen[i],maxlen[j]+1),maxlen[2]=max(1,1+1),maxlen[2]=2,所以在7下面的1数是1下面的1数再加一笔

 第2次i从3(对应数字3)开始,所以j从1到i-1也就是1,2(对应数字1,7),发现3比1大,所以3下面的1数是1下面的1数又加一笔,也就是比谁大,就把谁下面的1的数量拿(覆盖原来的)过来再加1,比7小所以不加:

 接着i到4(对应数字5)了,比j的数字1和3都大,但是比较后3下面的1数最多,所以以它的加1,覆盖到5上,5下面就对应3了,接着i到9以此类推,最后的图是这样:

有几个1就代表了以这个数为终点的最长上升子序列的长度是多少,最后直接求最大输出就行了。 

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int a[maxn];
int maxlen[maxn]={0};
int main()
{int n;cin>>n;for(int i=1;i<=n;i++)//存入序列,并初始化maxlen[i]{cin>>a[i];maxlen[i]=1;}for(int i=2;i<=n;i++){for(int j=1;j<i;j++){if(a[i]>a[j])maxlen[i]=max(maxlen[i],maxlen[j]+1);}}int maxone=-1;for(int i=1;i<=n;i++)//找出maxlen[i]中值最大的{maxone=maxone>maxlen[i]?maxone:maxlen[i];}cout<<maxone<<endl;return 0;
}

 

 


http://chatgpt.dhexx.cn/article/Bnbp5MYA.shtml

相关文章

最长上升子序列(动态规划)

子序列 所谓的子序列就是在原来序列中找出一部分组成的序列。 与子段不同&#xff0c;不需要连续的某一段&#xff0c;但是要保持原序列的先后顺序 最长上升子序列 在子序列的基础上&#xff0c;后一项大于前一项。 【题目描述】 【输入格式】 【输出格式】 【输入样例】 1…

最长上升子序列 (LIS) 详解+例题模板 (全)

欢迎访问https://blog.csdn.net/lxt_Lucia&#xff5e;&#xff5e; 宇宙第一小仙女\(^o^)/&#xff5e;萌量爆表求带飞≡Σ((( つ^o^)つ~ dalao们点个关注呗&#xff5e; --------------------------------我只是一条可爱哒分界线------------------------------- 1.摘要&…

Import Dependency Management with Exclusion

文章来源: Import Dependency Management with Exclusion Exclusion at import won’t work, try excluding it from the actual user of the dependency 意思是&#xff1a; 在dependencyManagement里面的dependency中&#xff0c;使用exclusions&#xff0c;是不会有作用的…

maven配置中的 scope, type,optional, classifier, 传递依赖,exclusions解释

scope用于依赖范围控制,它管理哪些依赖在哪些classpath 中可用&#xff0c;哪些依赖包含在一个应用中. 它的取值列表如下: 关于为什么使用provided 引入 servlet-api,jsp-api的问题的澄清: 在eclispe里创建web项目时&#xff0c;eclipse为我们自动添加了这两个jar包&#xff0…

记录--对于$off,Exclude 和 Extract的一点理解

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 一.typescript 高阶类型 Exclude 和 Extract Exclude<T, U> TypeScript 2.8 中增加了 Exclude 类型&#xff0c;该如何理解这个高级类型的定义呢&#xff1f; type Exclude<T, U> T exte…

[1120]Maven依赖冲突解决之exclusions

1. 背景 1、作为java生态下开发者&#xff0c;往往需要使用大量线程的第三方库&#xff0c;一般都是以jar包形式存在。 2、maven作为事实上主流的jar包依赖管理工具&#xff0c;Idea和Eclipse都支持创建maven工程来管理jar包依赖。 3、使用maven进行jar包依赖管理时&#xff0…

logical exclusive 与 physical exclusive 的区别

数字电路中一般会有多个clock&#xff0c;这些clock 相互之间有些是同步的&#xff0c;需要做 timing check 的&#xff0c;有些是异步的&#xff0c;不需要做 timing check 的&#xff0c;还有些是互斥的&#xff0c;需要 exclude 掉的&#xff0c;这些关系就需要在 sdc 中声明…

Maven中 排除依赖 exclusions

使用maven进行jar包依赖管理时&#xff0c;maven会自行管理jar包及其依赖链条&#xff0c;但往往会遇到依赖冲突问题&#xff0c;这时候就可以尝试使用exclusions来进行依赖管理 demo:排除tomcat 启用 jetty <dependency><groupId>org.springframework.boot</g…

Exclusive or

题目连接 题意&#xff1a; 每次给一个n&#xff0c;求 (2≤n<10500) 分析&#xff1a; 先说一下自己的想法&#xff0c;如果将n换成二进制数&#xff0c;也就一两千位左右&#xff0c;那么一位一位处理是可以接受的。将0-n写成二进制形式后&#xff0c;显然所有数某一个二进…

Maven依赖冲突解决之exclusions

Maven依赖冲突解决之exclusions 1. 背景 作为java生态下开发者,往往需要使用大量线程的第三方库,一般都是以jar包形式存在。maven作为事实上主流的jar包依赖管理工具,Idea和Eclipse都支持创建maven工程来管理jar包依赖。使用maven进行jar包依赖管理时,maven会自行管理jar包…

【带你吃透C++】引用详解(引用和指针的区别)

引用 1 引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 比如&#xff1a;李逵&#xff0c;在家称为"铁牛"&#xff0c;江湖上人称"…

浅析C++中引用与指针的区别

引用和指针的概念及区别 1. 引用及指针概念1.1 指针概念1.2 引用概念 2. 引用与指针的区别 1. 引用及指针概念 如果熟悉指针和引用的使用&#xff0c;应该能感觉到指针和引用在很多场景使用起来还是有很大的相似性的&#xff0c;尽管它们在语法层面上是俩个完全不同的概念。 那…

C语言-引用和指针的区别?

①引用的格式&#xff1a;数据类型 &引用名 变量名&#xff1b; 指针的格式&#xff1a;数据类型 *变量名指向的变量地址&#xff1b;②使用引用一定要进行初始化 指针为了不出现野指针&#xff0c;也要进行初始化为NULL ③引用只能对数组的元素使用&#xff0c;不能对整个…

c++引用与指针的区别

目录 一、从语法上来讲 二、从汇编层面来看 一、从语法上来讲 1.指针是存储某个实例的地址&#xff0c;引用是实例的别名 2.程序为指针分配内存区域&#xff0c;而不为引用分配内存区域 3.指针使用时要加 “ * ”&#xff0c;解引用&#xff0c;引用可以直接使用 例&…

C++引用和指针的区别

作者&#xff1a;RainMan 链接&#xff1a;https://www.zhihu.com/question/37608201/answer/545635054 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 引用是C引入的重要机制&#xff08;C语言没有引用&#xff0…

引用和指针的区别

引用和指针的区别: C的引用(Reference) 1.定义引用就是给某个变量起别名&#xff0c;对引用的操作和对该变量操作完全相同。 int a 10&#xff1b; int& b a;//b就是a的别名 b; cout << a << endl;//11 2 常引用 1&#xff09;定义引用时加const修饰&#…

C++中引用和指针的区别

下面用通俗易懂的话来概述一下&#xff1a; 指针-对于一个类型T&#xff0c;T*就是指向T的指针类型&#xff0c;也即一个T*类型的变量能够保存一个T对象的地址&#xff0c;而类型T是可以加一些限定词的&#xff0c;如const、volatile等等。见下图&#xff0c;所示指针的含义&am…

C/C++引用和指针的区别

为什么C/C语言使用指针&#xff1f; 答案&#xff1a;①一方面&#xff0c;每一种编程语言都使用指针。不止C/C使用指针。 每一种编程语言都使用指针。C将指针暴露给了用户(程序员)&#xff0c;而Java和C#等语言则将指针隐藏起来了。 “Everything uses pointers. C just expo…

C++ 引用详解(引用的特点,引用与指针的区别,引用的其他使用)

目录 引用一.引入</font>二.C中较为麻烦的运算符</font>三.引用的定义</font>四.引用的特点五.对比指针与引用六.引用与指针的区别&#xff08;重点&#xff09;1.语法层面的区别2.汇编层面的区别 七.引用的其他使用 引用 一.引入 在生活中&#xff0c;我们…

Zipkin和Sleuth

“sleuth的作用是在系统中自动埋点并把数据发送给zipkin,zipkin的作用是存储这些数据并展现。” 说白了 sleuth就是为了Zipkin服务的 看了一圈 总结一下 就是微服务的链路追踪 我们看这个延迟的时间可以判断哪个服务出现了问题 进而排查出问题 简单说&#xff1a;假如服务 …