1 #include<time.h> 2 #include <cstdio> 3 #include <iostream> 4 #include<algorithm> 5 #include<math.h> 6 #include <string.h> 7 #include<vector> 8 #include<queue> 9 using namespace std; 10 11 int dp[3005][3005],num[100005],a[100005]; 12 13 int main() 14 { 15 int n; 16 while(scanf("%d",&n)!=EOF) 17 { 18 for(int i=0;i<n;i++) 19 { 20 scanf("%d",&a[i]); 21 num[i]=a[i]; 22 } 23 24 sort(a,a+n); 25 dp[0][0]=0; 26 for(int i=0;i<n;i++) 27 for(int j=0;j<n;j++) 28 { 29 if(a[i]==num[j]) 30 dp[i+1][j+1]=dp[i][j]+1; 31 else 32 dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]); 33 } 34 printf("%d ",dp[n][n]); 35 } 36 return 0; 37 }