线性DP
状态数组:
$F[a_i]$:以$a_i$结尾的子序列的最大长度
转换方程
for(0~i-1){
if(a[j]<a[i]) f[i]=max(f[i],f[j]+1);
}
C++ 代码
#include<iostream>
using namespace std;
const int INF=0x3f3f3f3f,N=1010;
int f[N],a[N];
int main(){
int n,res=-INF;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
f[i]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
if(a[j]<a[i]) f[i]=max(f[i],f[j]+1);
}
res=max(res,f[i]);
}
cout<<res;
return 0;
}