HDU 1016 Prime Ring Problem
来源:互联网 发布:手机淘宝4.0 编辑:程序博客网 时间:2024/06/08 16:53
题目地址:点击打开链接
思路:回溯,用a数组保存素数的值
AC代码:
#include<stdio.h>#include<string.h>int a[40],b[20],vis[20],n;void dfs(int cur){int i;if(cur == n && a[b[n-1]+b[0]]){for(i=0; i<n-1; i++){printf("%d ",b[i]);}printf("%d\n",b[n-1]);}else{for(i=2; i<=n; i++){if(!vis[i] && a[i+b[cur-1]]){b[cur] = i;vis[i] = 1;dfs(cur+1);vis[i] = 0;}}}}int main(){int i,j,l=1;for(i=2; i<=40; i++){for(j=2;j*j<=i;j++){if(i % j == 0){a[i] = 0;break;}}if(j*j>i)a[i] = 1;}while(scanf("%d",&n) != EOF){b[0] = 1;memset(vis,0,sizeof(vis));printf("Case %d:\n",l++);dfs(1);printf("\n");}return 0;}
AC代码2:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>typedef long long ll;using namespace std;int a[30];int visit[30];int isprime[40];int k=0;int n;void doprime(){ int i,j; memset(isprime,0,sizeof(isprime)); isprime[1] = 0; for(i=2; i<=40; i++) { for(j=2; j*j<=i; j++) { if(i % j == 0) break; } if(j*j>i) isprime[i] = 1; else isprime[i] = 0; }}void dfs(int st){ int i,j; for(i=2; i<=n; i++) { if(!visit[i]) { if(isprime[i+a[st-1]]) { if(st == n) { if(isprime[i+1]) { a[st] = i; for(j=1; j<=n-1; j++) { printf("%d ",a[j]); } printf("%d\n",i); } } else { visit[i] = 1; a[st] = i; dfs(st+1); visit[i] = 0; } } } }}int main(){ doprime(); int cas = 1; while(scanf("%d",&n) != EOF) { memset(visit,0,sizeof(visit)); a[1] = 1; printf("Case %d:\n",cas++); dfs(2); printf("\n"); } return 0;}
训练赛时做的
0 0
- hdu 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- HDU 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- HDU-1016 prime ring problem
- hdu 1016Prime Ring Problem
- hdu 1016 Prime Ring Problem
- HDU-1016 Prime Ring Problem
- HDU-1016-Prime Ring Problem
- hdu 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- Hdu 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- Hdu 1016 - Prime Ring Problem
- HDU 1016 Prime Ring Problem
- 有序数组和二分法
- OC_交叉引入头文件问题
- hadoop Hdfs文件上传下载
- unbutu下安装与配置phpmyadmin
- 1057. Stack (30) - 树状数组
- HDU 1016 Prime Ring Problem
- 旋转数组
- 面试题10_二进制中1的个数
- RobotFramework+Selenium2Library环境安装
- 存储对象的数组
- Hadoop hdfs增删该查 简单写法
- C语言(3)--Fibonacci数列、候选人得票统计、字符串复制函数
- BZOJ 1068 [SCOI2007]压缩 区间DP
- HDU 1754 I Hate It (线段树)