求调

B3637 最长上升子序列

lzj1224 @ 2024-08-16 08:08:15

#include <iostream>   
#include <stdlib.h>      
using namespace std;
int n,a[114514],b[114514],maxl;
void f1(){
    int i,j,k;
    for(i=0;i<n;i++){
        k=0;
        b[k]=a[i];
        k++;
        for(j=i+1;j<n;j++){
            if(a[j]>b[k-1]){
                b[k]=a[j];
                k++;
            }
        }
        if(k>maxl) maxl=k;
        for(j=0;j<5001;j++) b[j]=0;
    }
    cout<<maxl;

}
int main(){
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    f1();
}

by lzj1224 @ 2024-08-16 08:08:56

40分


by 1984a @ 2024-08-16 10:25:36

#include<bits/stdc++.h> 
using namespace std;
int a[100005], d[10005];
int n;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int ans=1;
    for (int i=1;i<=n;i++){
        d[i]=1;
        for(int j=1;j<i;j++)
        if (a[j]<=a[i]){
            d[i]=max(d[i],d[j]+1);
            ans=max(ans,d[i]);
        }
    }
    cout<<ans<<endl;
}

@lzj1224 完美代码


by zldx @ 2024-08-20 14:50:32

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> v;
int main(){
    ll n;
    cin>>n;
    v ve1;
    v ve2(n,1);
    for(int i=0;i<n;i++){
        int z;
        cin>>z;
        ve1.push_back(z);
    }
    ve2[0]=1;
    for(int i=1;i<n;i++){
        for(int j=0;j<i;j++){
            if(ve1[j]<ve1[i]){
                ve2[i]=max(ve2[i],ve2[j]+1);
            }
        }
    }
    ll sum=0;
    for(int i=0;i<n;i++){
        sum=max(sum,ve2[i]);
    }
    cout<<sum;
    return 0;
}

|