55pts,求优化思路
查看原帖
55pts,求优化思路
1463301
qinzilin121113楼主2024/10/23 23:44
#include<bits/stdc++.h>
using namespace std;
int dp[1000000],a[1000000],n,mx1,to[1000000];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }if(n>5000){
        int cnt=0;
        for(int i=1;i<=n;i++){
            to[a[i]]++;
        }for(int i=1;i<=1000000;i++){
            if(to[i]>=2){
                cnt+=2;
            }
        }cout<<cnt;
        return 0;
    }
    for(int i=2;i<=n;i++){
        int j1=-1;
        for(int j=i-1;j>=1;j--){
            if(a[j]==a[i]){
                j1=j;
                break;
            }
        }if(j1!=-1) dp[i]=2;
        int mx=0;
        for(int j=j1-1;j>=1;j--){
            if(a[j]!=a[i]){
                mx=max(mx,dp[j]);
            }
        }dp[i]+=mx;
        mx1=max(mx1,dp[i]);
    }cout<<mx1;
    return 0;
}
2024/10/23 23:44
加载中...