最长上升子序列

题目描述

对于一个数的序列bi,当b1<b2<...<bS的时候,我们称这个序列是上升的。

对于给定的一个序列(a1,a2,...,an),我们可以找到一些上升的子序列(ai1,ai2,...,aiK),这里1 <= i1 < i2 < ... < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8).

你的任务,就是对于给定的序列,求出最长上升子序列的长度

输入格式

第一行输入一个整数n

第二行输入n个整数

输出格式

输出一个整数,表示最长递增子序列的长度

输入样例

5
5 4 3 2 1

输出样例

1

CODE

//2019.12.7
#include <bits/stdc++.h>
using namespace std;

int a[10010], dp[10010];

int main(){
	int n;
	scanf("%d", &n);
	for(int i = 1; i <= n; i++){
		dp[i] = 1;
		scanf("%d", &a[i]);
	}
	for(int i = 1; i <= n; i++){
		int k = -1;
		for(int j = 1; j <i ; j++)
			if(a[j] < a[i] && dp[j] > k)	k = dp[j];
		if(k == -1) k = 0;
		dp[i] += k;
	}
	int maxn = -1;
	for(int i = 1; i <= n; i++)	maxn = max(maxn, dp[i]);
	printf("%d\n", maxn);
    return 0;
}
posted @ 2020-10-31 23:52  LT-Y  阅读(58)  评论(0)    收藏  举报