有2种dfs的方法:

1.存下每个组的各个数和其质因数,每次对于新的一个数,与各组比对是否互质,再添加或不添加入该组。

2.不存质因数了,直接用gcd,更加快。P.S.然而我不知道为什么RE,若有好心人发现请教教我吧,谢谢~ :-)

下面附上方法1的AC代码——

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<iostream>
 6 using namespace std;
 7
 8 int n,ans=12;
 9 int a[12];
10 struct node {int t;int p[3000];}
11 b[12];
12
13 int mmin(int x,int y)
14 {   return x<y?x:y;  }
15 int com(int id,int x)
16 {
17     for (int i=1;i<=b[id].t;i++)
18       if (x%b[id].p[i]==0) return 0;
19     return 1;
20 }
21 void dfs(int id,int h)
22 {
23     int x=a[id];
24     if (id>n) {ans=mmin(ans,h); return;}
25     for (int i=1;i<=h;i++)
26       if (com(i,x))
27       {
28         int y=x,tt=b[i].t;
29         for (int j=2;j<=y;j++)//sqrt(y) wrong
30           if (y%j==0) y/=j, b[i].p[++b[i].t]=j;
31         dfs(id+1,h);
32         b[i].t=tt;
33       }
34     int y=x;
35     b[h+1].t=0;
36     for (int j=2;j<=y;j++)
37       if (y%j==0) y/=j, b[h+1].p[++b[h+1].t]=j;
38     dfs(id+1,h+1);
39 }
40 int main()
41 {
42     scanf("%d",&n);
43     for (int i=1;i<=n;i++)
44       scanf("%d",&a[i]);
45     dfs(1,0);
46     printf("%d",ans);
47     return 0;
48 }

View Code

方法2的90分RE代码——

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 using namespace std;
 6
 7 const int N=15;
 8 int n,ans;
 9 int a[N],b[N][N],t[N];
10
11 int mmin(int x,int y)
12 {   return x<y?x:y;  }
13 int gcd(int x,int y)
14 {   return (!y)?x:gcd(y,x%y);  }
15 bool addit(int x,int i)
16 {
17     for (int j=1;j<=t[i];j++)
18       if (gcd(x,b[i][j])!=1) return false;
19     return true;
20 }
21 void dfs(int x,int h)
22 {
23     if (x>n) {ans=mmin(h,ans);return;}
24     for (int i=1;i<=h;i++)
25       if (addit(a[x],i))
26       {
27         b[i][++t[i]]=a[x];
28         dfs(x+1,h);
29         t[i]--;
30       }
31     b[h+1][++t[h+1]]=a[x];
32     dfs(x+1,h+1);
33 }
34 int main()
35 {
36     scanf("%d",&n);
37     for (int i=1;i<=n;i++)
38       scanf("%d",&a[i]);
39     memset(t,0,sizeof(t));
40     ans=N;
41     dfs(1,0);
42     printf("%d\n",ans);
43     return 0;
44 }

View Code

其实noi上的数据还有个问题——1应该专门放在一组中,而该题数据没有考虑到这点......

转载于:https://www.cnblogs.com/konjak/p/5858102.html

【noi 2.5_7834】分成互质组(dfs)相关推荐

  1. 小学奥数 7834 分成互质组 python

    http://noi.openjudge.cn/math/7834/ 参考: 信息学奥赛一本通(1221:分成互质组) https://blog.csdn.net/lvcheng0309/articl ...

  2. 信息学奥赛一本通(1221:分成互质组)

    1221:分成互质组 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 7405     通过数: 3453 [题目描述] 给定n个正整数,将它们分组,使得每组中任意 ...

  3. C++递归算法之分成互质组

    分成互质组 Description 给定n个正整数,将它们分组,使得每组中任意两个数互质.至少要分成多少个组? Input 第一行是一个正整数n.1 <= n <= 10. 第二行是n个不 ...

  4. POJ 7834:分成互质组

    " Ctrl AC!一起 AC!" 原题:忘题戳这 分析:对于一个数,遍历所有的互质组,如果可以进入一个组,并保持组内互质,则总组数不变.否则总组数加一. AC代码: #inclu ...

  5. 分成互质组 (信息学奥赛一本通-T1221)

    [题目描述] 给定n个正整数,将它们分组,使得每组中任意两个数互质.至少要分成多少个组? [输入] 第一行是一个正整数n.1 ≤ n ≤ 10. 第二行是n个不大于10000的正整数. [输出] 一个 ...

  6. 1221:分成互质组

    [题目描述] 给定n个正整数,将它们分组,使得每组中任意两个数互质.至少要分成多少个组? [输入] 第一行是一个正整数n.1 ≤ n ≤ 10. 第二行是n个不大于10000的正整数. [输出] 一个 ...

  7. AcWing 1118. 分成互质组

    题意: 给定 n 个正整数,将它们分组,使得每组中任意两个数互质. 问:至少要分成多少个组? 思路: dfs,对每一个元素,我们有两种操作: ①:放到现有组中的最后一组中(依次枚举最后一组的所有元素, ...

  8. 1118. 分成互质组

    给定 n 个正整数,将它们分组,使得每组中任意两个数互质. 至少要分成多少个组? 输入格式 第一行是一个正整数 n. 第二行是 n 个不大于10000的正整数. 输出格式 一个正整数,即最少需要的组数 ...

  9. OpenJudge 7384(分成互质组)

    应hfu要求,近几日整理搜索专题的内容,无意中翻出了一年前死活A不掉的一道不可做题(当时觉得).看着自己的代码风格变化天翻地覆,无奈感叹时间飞逝...算了少矫情管他的先A了再说(ง •̀_•́)ง 先 ...

最新文章

  1. 设置VS2010中使用IntelliTrace来进行调试
  2. OpenCV之core 模块. 核心功能(2)基本绘图 随机数发生器绘制文字 离散傅立叶变换 输入输出XML和YAML文件 与 OpenCV 1 同时使用
  3. php判断单选框是否被选中,jquery怎么判断radio是否选中
  4. C++radix sort基数排序的实现算法之二(附完整源码)
  5. .class文件格式(java字节码文件的格式)
  6. 移动web前端开发框架_移动前端开发是Web前端开发吗?
  7. d3.js 制作简单的俄罗斯方块
  8. C++中const char *p和char const *p
  9. python学习-10 运算符1
  10. 8月22日见!iQOO Pro跑分曝光:近50万得分 无对手
  11. iphone9发布_苹果将发布iPhone9!配置升级价格公道,期待官网亮相!
  12. .net html第一张图片,基于Asp.net C#实现HTML转图片(网页快照)
  13. Gym 100342E Minima (暴力,单调队列)
  14. afuwin64教程_AMI刷BIOS工具下载|AFUWIN(AMI刷BIOS工具) v4.47官方最新版 附使用教程_星星软件园...
  15. pcb地线应该不应该做成环路_电源PCB设计流程及要点全解析
  16. 【数据结构】银行排队取票机的原理是什么?详解队列
  17. 精益技术简历之道——改善技术简历的47条原则
  18. 下载PDF文件及打印PDF文件
  19. 100天精通Python(基础篇)——第19天:练习题:我要买票吗
  20. 开发管理 CheckLists(7) -项目利益相关者责任

热门文章

  1. CNN交通场景解析--Spatial as Deep: Spatial CNN for Traffic Scene Understanding
  2. mnist学习实例(2)
  3. 【openfst样例2】Downcasing Text
  4. Linux安装HDF5及遇到的问题总结
  5. java对于app版本号比较,Java对比APP版本号大小
  6. ejs文件与html,将HTMLWebpackPlugin与EJS文件一起使用
  7. ubuntu20安装mysql8.0.28
  8. springboot配置Redis哨兵主从服务 以及 Redis 集群
  9. 学python的游戏app_Python教学软件
  10. docker rails mysql_MySQL 进行 Docker 容器化之体验与感悟