最长上升子序列
Posted zouma
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长上升子序列相关的知识,希望对你有一定的参考价值。
最长上升子序列(百练2757)
问题描述
一个数的序列ai,当a 1 < a 2 < ... < a S 的时候,我们称这个
序列是上升的。对于给定的一个序列(a 1 , a 2 , ..., a N ),我们可
以得到一些上升的子序列(a i1 , a i2 , ..., a iK ),这里1 <= i1 <
i2 < ... < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),
有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序
列中最长的长度是4,比如子序列(1, 3, 5, 8).
你的任务,就是对于给定的序列,求出最长上升子序列的长度。
输入数据
输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出
序列中的N个整数,这些整数的取值范围都在0到10000。
输出要求
最长上升子序列的长度。
输入样例
7
1 7 3 5 9 4 8
输出样例
4
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 constexpr int MAX = 1001; 5 int a[MAX]; 6 int maxlen[MAX]; 7 int n; 8 int main(void) 9 { 10 cin >> n; 11 int i; 12 for (i = 1; i <= n; ++i) 13 { 14 cin >> a[i]; 15 maxlen[i] = 1; 16 } 17 int j; 18 for (i = 2; i <= n; ++i) 19 { 20 for (j = 1; j <i; ++j) 21 { 22 if (a[i] > a[j]) 23 { 24 maxlen[i] = max(maxlen[i], maxlen[j] + 1); 25 } 26 } 27 } 28 cout << *max_element(maxlen + 1, maxlen + n + 1); 29 return 0; 30 }
以上是关于最长上升子序列的主要内容,如果未能解决你的问题,请参考以下文章