关于 dp 200分 O(n^2)
查看原帖
关于 dp 200分 O(n^2)
558597
MujicaSaki摸鱼楼主2022/6/20 19:24

乱搞出来的,有人能给个详细的解释吗

#include<bits/stdc++.h>
using namespace std;
int dp[1000005],a[100005],maxn=1,t,v[1000005],l;
int main(){
while(cin>>a[++t]);
t--;
for(int i=1;i<=t;i++){
    dp[i]=1;
    for(int j=l;j>0;j--){
        if(a[i]<=a[v[j]]){
        dp[i]=dp[v[j]]+1;
        break;
        }
    }
    l=max(l,dp[i]);
    v[dp[i]]=i;
    maxn=max(maxn,dp[i]);
}
cout<<maxn<<endl;
maxn=1;
l=0;
for(int i=1;i<=t;i++){
    dp[i]=1;
    for(int j=l;j>0;j--){
        if(a[i]>a[v[j]]) {
        dp[i]=dp[v[j]]+1;
        break;
        }
    }
    l=max(l,dp[i]);
    v[dp[i]]=i;
    maxn=max(maxn,dp[i]);
}
cout<<maxn;
}
2022/6/20 19:24
加载中...