最长上升子序列模型
作者:
hongye
,
2025-04-09 19:22:51
· 辽宁
,
所有人可见
,
阅读 4
#include <iostream>
#include <string.h>
using namespace std;
const int N = 100010;
int val[N] , dp[N] , road[N];
int n;
int dfs(int steps){
if(steps == 0) return 0;
if(dp[steps] > 0) return dp[steps];
int res = 1;
for(int i=0;i<=steps;i++){
if(val[steps] > val[i]){
res = max(res,dfs(i)+1);
}
}
dp[steps] = res;
return res;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>val[i];
}
for(int i=1;i<=n;i++) dfs(i);
int res = -1e9;
for(int i=1;i<=n;i++) {
res = max(res,dp[i]);
}
cout<<res<<endl;
return 0;
}
#include <iostream>
using namespace std;
const int N = 100010;
int val[N] , dp[N];
int n , m;
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>val[i];
for(int i=1;i<=n;i++){
int ans = 1;
for(int j=i-1;j>=1;j--){
if(val[i]>val[j]) ans = max(ans,dp[j]+1);
}
dp[i] = ans;
}
int res = 0;
for(int i=1;i<=n;i++) res = max(res,dp[i]);
cout<<res<<endl;
return 0;
}