Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
180038 | 刘睿甫 | 互质组 | C++ | 通过 | 100 | 4 MS | 252 KB | 999 | 2024-08-21 12:58:36 |
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=20; int q[N]; int n,sum; int group[N][N]; bool st[N]; int gcd(int a,int b) { return b? gcd(b,a%b) : a; } bool check(int group[],int gc,int i) { for(int j=0;j<gc;j++) { if(gcd(group[j],q[i])>1)return false; } return true; } void dfs(int g,int gc,int tc,int start) { if(g>=sum)return ; if(tc==n) { sum=g; } bool flag=true; for(int i=start;i<n;i++) { if(!st[i] && check(group[g],gc,i)) { st[i]=true; group[g][gc]=q[i]; dfs(g,gc+1,tc+1,i+1); st[i]=false; flag=false; } } if(flag) dfs(g+1,0,tc,0); } int main() { cin>>n; sum=n; for(int i=0;i<n;i++) { cin>>q[i]; } dfs(1,0,0,0); cout<<sum<<endl; return 0; }