首页 > 其他分享 >「模板」最长不下降子序列 LIS

「模板」最长不下降子序列 LIS

时间:2023-05-13 12:04:11浏览次数:47  
标签:int 样例 下降 LIS 序列 最长 模板

最长不下降子序列 LIS

在一个数字序列中,找到一个最长的子序列(可以不连续),使得这个子序列是不下降(非递减)的。

例如,现有序列A = {1,2,3,-1,-2,7,9}(下标从1开始),它的最长不下降子序列是{1,2,3,7,9},长度为5。另外,还有一些子序列是不下降子序列,比如{1,2,3},{-2,7,9}等,但都不是最长的。

输入

第一行为n,表示n个数 第二行n个数

输出

最长不下降子序列的长度

样例

样例输入1

3
1 2 3

样例输出1

3

提示

N小于5000,且每个数\(\le max int\)

Code

dp

#include <bits/stdc++.h>
using namespace std;
int a[5005],dp[5005];
int main()
{
	int n;
	cin >> n;
	for(int i=1;i<=n;i++)
	{
		cin >> a[i];
	}
	for(int i=1;i<=n;i++)
	{
		dp[i]=1;//一开始就置为1
		for(int j=1;j<i;j++)
		{
			if(a[j]<=a[i])
			{//所有可能更新dp[i]的j
				if(dp[i]<=dp[j]+1)
				{
					dp[i]=dp[j]+1;
				}
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		if(ans<dp[i])
		{
			ans=dp[i];
		}
	}
	cout << ans;
	return 0;
}

标签:int,样例,下降,LIS,序列,最长,模板
From: https://www.cnblogs.com/momotrace/p/lis-dp.html

相关文章

  • 模板
    #include<iostream>using namespace std;template <class T,int n>class mysequence {T memblock[N];public:void setmember(int x,T value){memblock[x]=value; }T getmember(int x){return memblock[x];}}; int main(){mysequence<int......
  • 使用Pandoc构建Acm模板
    使用Pandoc构建Acm模板下周日打完河南ICPC省赛就要退役了,以后一场比赛前想要整理一下板子,想要一个拥有目录,页眉。页脚的Acm模板,这样就可以在比赛的时候快速翻阅,而且要更加好看但是存在的问题是:很多构建Acm模板的时候会使用Latex进行构建,但是我使用了很多,要么是些许麻烦,也许是我......
  • 标准模板11
    #include<iostream>#include<numeric>#include<functional>#include<vector>usingnamespacestd;intmain(){ intiarray[]={1,2,3,4,5}; vector<int>ivector(iarray,iarray+sizeof(iarray)/sizeof(int)); cout<<accumulate(ivector.beg......
  • Python 输出简单彩色字符【ANSI 转义序列笔记】
    """ASCII码的0-31和127被称为C0控制字符例如\07就是BEL,响铃(\0表示八进制)其中\033(十进制27,十六进制x1B)是ESC,转义字符,它可以用于转义序列如\033[表示序列导入(ControlSequenceIntroducer),简写为CSI也可写作\x1b[两个字......
  • 标准模板10
    #include<functional>#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;usingnamespaceplaceholders;intmain(){ intintArr[]={30,90,10,40,70,50,20,80}; constintN=sizeof(intArr)/sizeof(int); vector<int>......
  • 引用在模板推导中的基础逻辑
    reference引用是C++相对于C语言指针引入的一个新语法,可以以简单变量来使用指针。这种语法在使用的时候还是比较方便的,但是也在模板类型推导的过程中也带来了一些需要额外关注的细节。例子下面的例子中,rt是一个引用类型,问题是在模板参数函数Harry的定义中,模板参数TSECER并没有包......
  • CF1824D LuoTianyi and the Function & 区间历史和模板
    LuoTianyiandtheFunction:LuoTianyigivesyouanarray\(a\)of\(n\)integersandtheindexbeginsfrom\(1\).Define\(g(i,j)\)asfollows:When\(i\lej\),\(g(i,j)\)isthelargestinteger\(x\)thatsatisfies\(\{a_p:i\lep\le......
  • ArrayList、LinkedList和Vector
    ArrayList、LinkedList和Vector都实现了List接口,是List的三种实现。ArrayList底层是用动态数组实现的。默认大小10privatestaticfinalintDEFAULT_CAPACITY=10;当集合中的元素数量大于集合大小时会根据集合大小扩容50%,既:第一次扩容5到15,第二次扩容7到22,第三次扩容11......
  • C++ 模板
     模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,比如 向量 ,我们可以定义许多不同类型的向量,比如 vector<in......
  • C++ 模板
    模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,比如 向量 ,我们可以定义许多不同类型的向量,比如 vector<int> 或......