描述
给出一个由 n(n≤5000)个不超过106的正整数组成的序列。请输出这个序列的最长上升子序列的长度。
最长上升子序列是指,从原序列中按顺序取出一些数字排在一起,这些数字是逐渐增大的。
输入描述
第一行,一个整数n,表示序列长度。
第二行有n个整数,表示这个序列。
输出描述
一个整数表示答案。
样例输入 1
6 1 2 4 1 3 4
样例输出 1
4
提示
这是一个典型的动态规划的问题
转移方程:dp[i]=max(dp[i],dp[j]+1);
#include<bits/stdc++.h>
using namespace std;
int a[5005],dp[5005],cnt,n;
int main(){
cin>>n;
for(int i = 1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
dp[i]=1;
for(int j=1;j<i;j++){
if(a[i]>a[j]){
dp[i]=max(dp[i],dp[j]+1);
}
}
cnt=max(cnt,dp[i]);
}
cout<<cnt;
return 0;
}