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;
}
标签:cnt,697,int,Codeforces,Div,整除
From: https://www.cnblogs.com/ycllz/p/16879161.html