题解 | kotori和素因子
kotori和素因子
https://www.nowcoder.com/practice/7b1c858a3e7a41ed8364178979eaae67
#include<bits/stdc++.h>
using namespace std;
const int N=20,Ma=1010;
int n,a[N],prime[Ma],pr,mi=INT_MAX;
bool vis[Ma],f[N],res=false;
set<int> st;
vector<vector<int> > v(N);
void pre(){
for(int i=2;i<=Ma;i++){
if(!vis[i]){
vis[i]=true;
prime[++pr]=i;
for(int j=i*2;j<=Ma;j+=i){
vis[j]=true;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=pr;j++){
if(prime[j]>a[i]) break;
if(a[i]%prime[j]==0) v[i].push_back(prime[j]);
}
}
}
void dfs(int i,int sum){
if(i==n+1){
res=true;
mi=min(mi,sum);
return;
}
for(int j=0;j<v[i].size();j++){
if(st.count(v[i][j])==0){
st.insert(v[i][j]);
dfs(i+1,sum+v[i][j]);
st.erase(v[i][j]);
}
}
//暴力解
// for(int j=1;j<=n;j++){
// if(f[j]) continue;
// for(int k=1;k<=pr;k++){
// if(prime[k]>a[j])break;
// if(a[j]%prime[k]==0&&st.count(prime[k])==0){
// f[j]=true;
// st.insert(prime[k]);
// dfs(i+1,sum+prime[k]);
// f[j]=false;
// st.erase(prime[k]);
// }
// }
// }
}
void solve(){
pre();
dfs(1,0);
if(res) cout<<mi<<endl;
else cout<<-1<<endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
solve();
return 0;
}
文远知行公司福利 588人发布
查看12道真题和解析