A40962. 上升子序列
填空题
较难
知识点
题目描述
上升子序列
题目描述
一个数字的序列b i,当b 1 < b 2 < ... < b S的时候,我们称这个序列是上升的。对于给定的一个序列( a 1 , a 2 , ..., a N ),我们可以得到一些上升的子序列( a i 1 , a i 2 , ..., a i K ),这里 1 <= i 1 < i 2 < ... < i K <= N。例如,这些序列中的序列(1,7,3,5,9,4,8),有它的一些上升序列,如(1,7),(3,4,8)等。长度为4,例如子序列(1, 3, 5, 8)。你的任务,就是给定的序列,求出最长子序列的长度。
输入
输入的行是序列的长度N <= N <= 100)。 输入的序列中的第N个值行有第二个范围,有这些到的取值都在01000000。
输出
最长上升子序列的长度。
样例输入
7
1 7 3 5 9 4 8
样例输出
4
参考答案
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int num[1000];
int maxlen[1000];
int main() {
int N;
cin >> N;
for(int i = 0; i < N; i++) {
cin >> num[i];
maxlen[i] = 1;
}
//以第i个整数为终点,求其的最长子序列,遍历0-i的整数,若小于num[i],则用maxlen[j]+1与maxlen[i]取最大值赋值给maxlen[j]
for(int i = 1; i < N; i++) {
for(int j = 0; j < i; j++) {
if(num[i] > num[j]) {
maxlen[i] = max(maxlen[i], maxlen[j] + 1);
}
}
}
cout << * max_element(maxlen, maxlen + N);
return 0;
}
上一题
下一题