9600: 最长上升子序列
时间限制: 1.000 Sec 内存限制: 128 MB
提交: 105 解决: 34
[命题人:][下载数据: 60]
题目描述
从一组数中抽选出尽可能多的数,要求:
(1)抽选出来的数之间的相对位置保持不变。也就是原来在前面的数,抽选后依然在前面。
(2)要保证抽选出的数是一个递增序列。
求抽出的这个递增序列最大长度。
输入
第一行N,表示原数列中数的个数
第二行有n个数
输出
一行,表示抽出的序列最大长度
样例
输入 复制
7 1 7 3 5 9 4 8
输出 复制
4
提示
1 7 3 5 9 4 8
从这7个数可以抽出 1 3 5 9 四个数构成最长序列
从这7个数可以也可以抽出 1 3 4 8 四个数构成最长序列
最长递增序列长度为4
代码:
#include<bits/stdc++.h>
using namespace std;
int a[20005],f[20005],ans=1;
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
f[1]=1;
for(int i=2;i<=n;i++){
for(int j=1;j<=i;j++){
if(a[j]<a[i]){
f[i]=max(f[i],f[j]+1);
}
}
}
for(int i=1;i<=n;i++){
ans=max(ans,f[i]);
}
cout<<ans;
return 0;
}