欲望以提升热忱,毅力以磨平高山!|

XichenOC

园龄:1个月粉丝:4关注:0

📂题解
🔖搜索
2025-01-20 18:55阅读: 4评论: 0推荐: 0

U208362 分为互质组

U208362 分为互质组

题目与P10483 小猫爬山相识 只需要将判断条件改为是否互质即可

小猫爬山题解

代码:

#include<bits/stdc++.h>
using namespace std;
int a[100];
vector<int>sum[100];

int n,w;
bool b[100];
int ans=INT_MAX;

int isrp(int a,int b){
	if(b==0){
		return a;
	}
	return isrp(b,a%b);
}
bool check(int num,int m){
	bool flag=true;
	for(int i=0;i<sum[num].size();i++){
		if(isrp(sum[num][i],a[m])!=1){
			flag=false;
		}
	}
	return flag;
}
void dfs(int st,int num){
	if (num>=ans)
		return;
	if(st>n){
		ans=num;
		return;
	}
	sum[num+1].push_back(a[st]);
	dfs(st+1,num+1); 
	for(int i=1;i<=num;i++) {
		if(check(i,st)){
			vector<int>now;
			now.clear();
			for(int j=0;j<sum[i].size();j++){
				now.push_back(sum[i][j]);
			}
			sum[i].push_back(a[st]);
			dfs(st+1,num);
			sum[i].clear();
			for(int j=0;j<now.size();j++){
				sum[i].push_back(now[j]);
			}
		}
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}	
	dfs(1,0);
	cout<<ans;
	return 0;
}

本文作者:XichenOC

本文链接:https://www.cnblogs.com/XichenOC/p/18682328

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   XichenOC  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起