当前位置:   article > 正文

DFS - 分成互质组 - 计蒜客 T1216_给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?

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

DFS - 分成互质组 - 计蒜客 T1216

给定 n 个正整数,将它们分组,使得每组中任意两个数互质

至少要分成多少个组?

输入格式
第一行是一个正整数 n。

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

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

数据范围

1≤n≤10
  • 1

输入样例:

6
14 20 33 117 143 175
  • 1
  • 2

输出样例:

3
  • 1

分析:

d f s 策 略 : dfs策略: dfs

依 次 枚 举 每 个 每 个 正 整 数 a [ u ] , 对 每 个 a [ u ] , 依 次 枚 举 每 一 组 , 判 断 a [ u ] 能 否 放 入 现 有 的 组 中 。 依次枚举每个每个正整数a[u],对每个a[u],依次枚举每一组,判断a[u]能否放入现有的组中。 a[u]a[u]a[u]

具体落实:

v e c t o r 开 二 维 数 组 v e c t o r 来 记 录 每 一 组 对 应 的 数 。 vector开二维数组vector来记录每一组对应的数。 vectorvector

全 局 变 量 a n s 来 更 新 最 少 需 要 的 组 的 数 量 。 全局变量ans来更新最少需要的组的数量。 ans

注 意 回 溯 恢 复 现 场 。 注意回溯恢复现场。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>

using namespace std;

const int N=10;

int n,a[N];
vector<int> g[N];
int ans=N,len;

int gcd(int a,int b)
{
    return b ? gcd(b,a%b) : a;
}

bool check(int u,int k)   //u能否放入第k组
{
    for(int i=0;i<g[k].size();i++)
        if(gcd(g[k][i],u)>1)
            return false;
    return true;
}

void dfs(int u)
{
    if(u==n)
    {
        ans=min(ans,len);
        return ;
    }
    
    //看a[u]能够放在哪一组
    for(int i=0;i<len;i++)
        if(check(a[u],i))
        {
            g[i].push_back(a[u]);
            dfs(u+1);
            g[i].pop_back();
        }
    
    //开新组
    g[len++].push_back(a[u]);
    dfs(u+1);
    g[--len].pop_back();
}

int main()
{
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    
    dfs(0);
    
    cout<<ans<<endl;
    
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/744362
推荐阅读
相关标签
  

闽ICP备14008679号