题目解释:
一串数字比如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;
}