前言
好像这个叫组内最大团 ?
传送门 :
思路
d f s dfs dfs分析当前节点
- 新开一组,放到新的组里
- 使用之前开过的组
因此我们直接按照题意DFS即可 (怎么说呢?
CODE
bool check(int g[],int gc,int num)
{
for(int i = 0 ;i<gc;i++)
if(__gcd(g[i],p[num])>1)
return false;
return true;
}
void dfs(int g,int gc,int tc,int start)
{
if(g>=ans)
return;
if(tc == n)
ans = 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]= p[i];
dfs(g,gc+1,tc+1,i+1);//不开组
st[i] =false;
flag = false;
}
if(flag)
dfs(g+1,0,tc,0);//新开组
}
void solve()
{
cin>>n;
ans = n ;
for(int i = 0;i<n;i++)
cin>>p[i];
dfs(1,0,0,0);
cout<<ans<<endl;
}