poj2034 dfs
来源:互联网 发布:大华录像机网络设置 编辑:程序博客网 时间:2024/05/29 14:27
冯如杯完了,有时间可以惬意的刷几道了。
这题是求n到m的一个排列,满足相邻的2个,3个……d个数的和都不为素数(都要满足)。
然后上代码,挺简单,是所以发代码,是觉得自己写得比较漂亮。(呵呵,不要喷我)
#include <iostream>using namespace std;bool ans,p[10010],h[1010];int n,m,d,a[1010],sum[11];void dfs(int dep) { if (ans) return; if (dep==m-n+2) { ans = true; for (int i=1;i<dep-1;i++) printf("%d,",a[i]); printf("%d\n",a[dep-1]); return; } for (int i=n;i<=m;i++) if (!h[i]) { bool conti = 0; for (int k=2;k<=d;k++) { if (dep==k && p[sum[k]+i]) conti = 1; if (dep>k && p[sum[k]+i-a[dep-k]]) conti = 1; } if (conti==1) continue; h[i] = 1; a[dep] = i; for (int k=2;k<=d;k++) { sum[k] += i; if (dep>k) sum[k] -= a[dep-k]; } dfs(dep+1); for (int k=2;k<=d;k++) { sum[k] -= i; if (dep>k) sum[k] += a[dep-k]; } h[i] = 0; }}int main() { memset(p,1,sizeof(p)); p[1] = 0; for (int i=2;i<=10000;i++) if (p[i]) for (int j=i+i;j<=10000;j+=i) p[j] = false; while (~scanf("%d%d%d",&n,&m,&d)) { if (n==0 && m==0 && d==0) break; memset(h,0,sizeof(h)); memset(sum,0,sizeof(sum)); ans = 0; dfs(1); if (!ans) printf("No anti-prime sequence exists.\n"); } return 0; }
- poj2034 dfs
- 素数判断+DFS POJ2034
- poj2034
- POJ2034
- POJ2034 Anti-prime Sequences【素数筛法】【DFS】
- POJ2034 线性筛+DFS(下午第二节课给小裴和诗洋同学表演手打一遍过...)
- POJ2034 Anti-prime Sequences初等数论
- DFS
- DFS
- dfs
- dfs
- dfs
- dfs
- DFS
- DFS
- dfs
- DFS
- DFS
- 函数式编程另类指南
- asp.net GridView和下拉菜单DropDownList结合
- Maven with IntelliJ IDEA 学习笔记(一)
- Ext的Dom操作——创建节点
- 无线网络领域国际会议/期刊排名
- poj2034 dfs
- Ext的Dom操作——增加节点
- 算法---快速排序
- VC提前注入.net软件的方法
- Ext的Dom操作——节点替换
- dos命令行下,生成可执行jar包
- 调用静态链接库和动态链接库
- 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
- 利用Weka API进行线性回归