这道题的dp定义为:
dp【i】以a[i]结尾的最长上升子序列;因为自己的最长上升为1也就是只有自己所以dp[i]=1;
然后枚举i之前的,每次记录以a[i]结尾的最长上升子序列:
dp[i]=max(1,dp[j]+1);//因为只要i前面出现了上升那么就是+1;
#include<iostream>
#include<algorithm>
using namespace std;
int dp[2000];
int main(){
int n,a[1500];
cin>>n;
int ans=0;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=0;i<n;i++){
dp[i]=1;
for(int j=0;j<i;j++){//枚举i个以前的
if(a[j]<a[i]){
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=max(ans,dp[i]);//每次记录最大值
}
cout<<ans<<endl;
return 0;
}