测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题