数据范围
1≤N≤10001≤N≤1000,
−109≤数列中的数≤109−109≤数列中的数≤109
输入样例:
7
3 1 2 1 8 5 6
输出样例:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int a[N];// a[i]表示第i个数
int f[N];// f[i]表示以第i个数结尾的最长上升子序列的长度
int n,m;// n表示数据个数,m表示最大路径和
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];// 输入数据
int mx=1;// 初始化最长上升子序列的长度为1
for(int i=0;i<n;i++){// 枚举每一个数
f[i]=1;// 初始化以第i个数结尾的最长上升子序列的长度为1
for(int j=0;j<i;j++){// 枚举第i个数之前的每一个数
if(a[j]<a[i]) f[i]=max(f[i],f[j]+1);// 如果第j个数小于第i个数,那么以第i个数结尾的最长上升子序列的长度就是以第j个数结尾的最长上升子序列的长度加1
}
mx=max(mx,f[i]);// 更新最长上升子序列的长度
}
cout<<mx<<endl;
return 0;
}
4