- 转化为最长上升子序列即可求解(一,可以从任何地方上,二,只需要从小到大得上,且没要求要上到最大值,只要求步数最多)
#include<bits/stdc++.h>
using namespace std;
int main(){
int in,a;
while(cin>>in){
vector<int> dp(in+1,1);//各自为阵
int num[in];
for(int i = 0; i< in;i++){
cin>>a;
num[i] =a;
}
int max_ = 0;
for(int i =1; i<= in; i++){
for(int j = 1; j< i; j++){
if(num[i-1]>num[j-1]){
dp[i] = max(dp[i],dp[j]+1);
}
if(dp[i]>max_){
max_ = dp[i];
}
}
}
cout<<max_<<endl;
}
return 0;
}
京公网安备 11010502036488号