Codeforces Round #697 (Div. 3) G

G. Strange Beauty

观察性质 我们发现他就是一个单向的关系
要是我们3能被9整除 那我们来一个能整除9的 那么一定能整除3
就是这个性质
我们考虑dp
dp[i]表示我们以a[i]结尾的max
对于每一个数 我们只需要枚举他的因子即可

void solve(){
    int n;cin>>n;
    vector<int>a(n+1),cnt(N),pos(N);
    for(int i=1;i<=n;i++){
        cin>>a[i];
        cnt[a[i]]++;
    }
    sort(all(a));
    a.erase(unique(all(a)),a.end());
    for(int i=1;i<a.size();i++)pos[a[i]]=i;
    //dp[i]表示以i结尾的max
    vector<int>dp(n+1);
    int ans=0;
    for(int i=1;i<a.size();i++){
        int x=a[i];
        dp[i]=max(dp[i],cnt[x]);
        for(int j=1;j*j<=x;j++){
            if(x%j==0&&pos[j]&&x!=j)dp[i]=max(dp[i],dp[pos[j]]+cnt[x]);
            if(x%j==0&&pos[x/j]&&x/j!=x)dp[i]=max(dp[i],dp[pos[x/j]]+cnt[x]);
            ans=max(ans,dp[i]);
        }
    }
    cout<<n-ans<<endl;
}
posted @ 2022-11-10 23:06  ycllz  阅读(17)  评论(0)    收藏  举报