NOI:最长上升子序列

题目解释:

一串数字比如1、5、3、6、9、8、10,它的子序列是从左到右不连续的若干个数,比如1、5、6,3、9、8、10都是它的子序列。

最长上升子序列即从左到右严格增长的最长的一个子序列,1、5、6、9、10就是这个序列的一个最长上升子序列。

给出若干序列,求出每个序列的最长上升子序列长度。

Input
多组数据,每组第一行正整数n,1 <= n <= 1000,第二行n个空格隔开的不大于1,000,000的正整数。

Output
每组数据输出一行,最长上升子序列的长度。

Sample Input
7
1 5 3 6 9 8 10
Sample Output
5

#include<iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX=1024;
int main()
{
    long long a[MAX],maxlen[MAX];
    int n,i,j;
    while(cin>>n)
    {
        for(i=1; i<=n; i++)
        {
            cin>>a[i];
            maxlen[i]=1;
        }
        for(i=2; i<=n; i++)
            for(j=1; j<i; j++)
                if(a[i]>a[j])
                    maxlen[i]=max(maxlen[i],maxlen[j]+1);
        cout<<* max_element(maxlen+1,maxlen+n+1)<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_43382549/article/details/88875921