【noi 2.5_7834】分成互质组(dfs)
有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)相关推荐
- 小学奥数 7834 分成互质组 python
http://noi.openjudge.cn/math/7834/ 参考: 信息学奥赛一本通(1221:分成互质组) https://blog.csdn.net/lvcheng0309/articl ...
- 信息学奥赛一本通(1221:分成互质组)
1221:分成互质组 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7405 通过数: 3453 [题目描述] 给定n个正整数,将它们分组,使得每组中任意 ...
- C++递归算法之分成互质组
分成互质组 Description 给定n个正整数,将它们分组,使得每组中任意两个数互质.至少要分成多少个组? Input 第一行是一个正整数n.1 <= n <= 10. 第二行是n个不 ...
- POJ 7834:分成互质组
" Ctrl AC!一起 AC!" 原题:忘题戳这 分析:对于一个数,遍历所有的互质组,如果可以进入一个组,并保持组内互质,则总组数不变.否则总组数加一. AC代码: #inclu ...
- 分成互质组 (信息学奥赛一本通-T1221)
[题目描述] 给定n个正整数,将它们分组,使得每组中任意两个数互质.至少要分成多少个组? [输入] 第一行是一个正整数n.1 ≤ n ≤ 10. 第二行是n个不大于10000的正整数. [输出] 一个 ...
- 1221:分成互质组
[题目描述] 给定n个正整数,将它们分组,使得每组中任意两个数互质.至少要分成多少个组? [输入] 第一行是一个正整数n.1 ≤ n ≤ 10. 第二行是n个不大于10000的正整数. [输出] 一个 ...
- AcWing 1118. 分成互质组
题意: 给定 n 个正整数,将它们分组,使得每组中任意两个数互质. 问:至少要分成多少个组? 思路: dfs,对每一个元素,我们有两种操作: ①:放到现有组中的最后一组中(依次枚举最后一组的所有元素, ...
- 1118. 分成互质组
给定 n 个正整数,将它们分组,使得每组中任意两个数互质. 至少要分成多少个组? 输入格式 第一行是一个正整数 n. 第二行是 n 个不大于10000的正整数. 输出格式 一个正整数,即最少需要的组数 ...
- OpenJudge 7384(分成互质组)
应hfu要求,近几日整理搜索专题的内容,无意中翻出了一年前死活A不掉的一道不可做题(当时觉得).看着自己的代码风格变化天翻地覆,无奈感叹时间飞逝...算了少矫情管他的先A了再说(ง •̀_•́)ง 先 ...
最新文章
- 设置VS2010中使用IntelliTrace来进行调试
- OpenCV之core 模块. 核心功能(2)基本绘图 随机数发生器绘制文字 离散傅立叶变换 输入输出XML和YAML文件 与 OpenCV 1 同时使用
- php判断单选框是否被选中,jquery怎么判断radio是否选中
- C++radix sort基数排序的实现算法之二(附完整源码)
- .class文件格式(java字节码文件的格式)
- 移动web前端开发框架_移动前端开发是Web前端开发吗?
- d3.js 制作简单的俄罗斯方块
- C++中const char *p和char const *p
- python学习-10 运算符1
- 8月22日见!iQOO Pro跑分曝光:近50万得分 无对手
- iphone9发布_苹果将发布iPhone9!配置升级价格公道,期待官网亮相!
- .net html第一张图片,基于Asp.net C#实现HTML转图片(网页快照)
- Gym 100342E 	Minima (暴力,单调队列)
- afuwin64教程_AMI刷BIOS工具下载|AFUWIN(AMI刷BIOS工具) v4.47官方最新版 附使用教程_星星软件园...
- pcb地线应该不应该做成环路_电源PCB设计流程及要点全解析
- 【数据结构】银行排队取票机的原理是什么?详解队列
- 精益技术简历之道——改善技术简历的47条原则
- 下载PDF文件及打印PDF文件
- 100天精通Python(基础篇)——第19天:练习题:我要买票吗
- 开发管理 CheckLists(7) -项目利益相关者责任
热门文章
- CNN交通场景解析--Spatial as Deep: Spatial CNN for Traffic Scene Understanding
- mnist学习实例(2)
- 【openfst样例2】Downcasing Text
- Linux安装HDF5及遇到的问题总结
- java对于app版本号比较,Java对比APP版本号大小
- ejs文件与html,将HTMLWebpackPlugin与EJS文件一起使用
- ubuntu20安装mysql8.0.28
- springboot配置Redis哨兵主从服务 以及 Redis 集群
- 学python的游戏app_Python教学软件
- docker rails mysql_MySQL 进行 Docker 容器化之体验与感悟