1221:分成互质组(这个题自己不会)

【题目描述】
给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?

【输入】
第一行是一个正整数n。1 ≤ n ≤ 10。

第二行是n个不大于10000的正整数。

【输出】
一个正整数,即最少需要的组数。

【输入样例】
6
14 20 33 117 143 175
【输出样例】
3

#include
#include
#include
using namespace std;
int a[11],n,team=99999;
vector<int>vis[11];
int gcd(int a,int b)
{
	return b==0?a:gcd(b,a%b);
}
void doit(int now,int tot)
{
	if(now==n+1)
	{
		team=min(team,tot);
		return;
	}
	for(int i=1;i<=tot;i++)
	{
		bool ok=false;
		for(int j=0;j<vis[i].size();j++)
		{
			if(gcd(vis[i][j],a[now])>1)
				ok=true;
		}
		if(!ok)
		{
			vis[i].push_back(a[now]);
			doit(now+1,tot);     
			vis[i].pop_back();     
		}
	}
	vis[tot+1].push_back(a[now]);
	doit(now+1,tot+1);
	vis[tot+1].pop_back();
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	doit(1,0);
	cout<<team;
	return 0;
}
————————————————
版权声明:本文为CSDN博主「心情想要飞」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44043668/article/details/85041912

你可能感兴趣的:(1221:分成互质组(这个题自己不会))