20求助

B3637 最长上升子序列

wccc_c @ 2024-10-09 21:27:49

#include<bits/stdc++.h>
using namespace std;
int n;
int dat[100001],dp[100001];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>dat[i];
    }
    //dp[1]=dat[1];
    int len=0;
    for(int i=1;i<=n;i++)
    {
        if(dat[i]>dp[len])dp[++len]=dat[i];
        else
        {
            int l=0,r=n,mid;
            while(l<r)
            {
                mid=(l+r)/2;
                if(dp[mid]>dat[i])r=mid;
                else l=mid+1;
            }
            dp[l]=dat[i];
        }
    }
    cout<<len;
    return 0; 
}

by ZYFERIC @ 2024-10-19 17:18:53

#include<bits/stdc++.h>
using namespace std;
int main(){
    int v,p,dp[5005]={0},a[5005],n,nmax=-1005;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        dp[i]=1;
        for(int j=1;j<i;j++){
            if(a[j]<a[i])dp[i]=max(dp[i],dp[j]+1);
            if(nmax<dp[i])nmax=dp[i];
        }
    }
    cout<<nmax;
}

@wccc_c dp板子


|