1 solutions

  • 0
    @ 2026-4-23 16:46:50
    #include<bits/stdc++.h>
    using namespace std;
    const int N=15;
    int a[N];
    vector<int> g[N];
    bool st[N];
    int ans=N;
    int n;
    bool check(vector<int> v,int i)
    {
    	for(auto x:v)
    	{
    		if(__gcd(a[x],a[i])>1) return false;//说明是互质的	
    	}	
    	return true;//说明是互质的 
    } 
    void dfs(int u,int cnt,int s) //组数,当前个数,起点 
    {
    	if(u>=ans) return ;
    	if(cnt==n)
    	{
    		ans=u;
    		return ;
    	}
    	bool flag=false;//还没有找到 
    	for(int i=s;i<=n;i++)
    	{
    		if(!st[i]&&check(g[u],i))
    		{
    			st[i]=1;
    			g[u].push_back(i);
    			dfs(u,cnt+1,i+1);
    			g[u].pop_back();
    			st[i]=0;
    			flag=true;
    		}
    	}
    	if(!flag)
    	{
    		dfs(u+1,cnt,1);
    	}
    }
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++) cin>>a[i];
    	dfs(1,0,1);
    	cout<<ans;
    	return 0;
    }
    
    
    • 1

    Information

    ID
    404
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    5
    Tags
    # Submissions
    2
    Accepted
    1
    Uploaded By