思路:
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1005;
int N;
int s[maxn];
int dp[maxn];
int ans = 0;
int main(){
cin>>N;
for(int i=0;i<N;i++)
cin>>s[i];
memset(dp , 0 , sizeof(dp));
for(int i=0;i<N;i++){
dp[i] = 1;
for(int j=0;j<i;j++)
if(s[i] > s[j])
dp[i] = max(dp[i] , dp[j] + 1);
ans = max(ans , dp[i]);
}
cout<<ans<<endl;
}
#include <iostream>
#include <cstring>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 1005;
int N;
int s[maxn];
int dp[maxn];
int main(){
cin>>N;
for(int i=0;i<N;i++)
cin>>s[i];
memset(dp , INF , sizeof(dp));
for(int i=0;i<N;i++)
*lower_bound(dp , dp+N , s[i]) = s[i];
cout<<lower_bound(dp , dp+N , INF) - dp<<endl;
return 0;
}