杭电ACM_1016_素数环
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1016
(经典的剪枝搜索)
题意:
就是求1~n的一个环(首尾衔接,顺序打乱),使得相邻的两个元素之和为一个素数
题解1:
用C++中得STL生成全排列,超时!!!!
#include <cstdio> #include <algorithm> using namespace std; int A[30]; bool prime[50]; bool is_prime(int n) { for (int i = 2; i*i <= n; i++) { if (!(n % i)) { return 0; } } return 1; } int main() { //freopen("input.txt","r",stdin); for (int i = 0; i < 50; i++) { prime[i] = is_prime(i); } int N; int nCase = 0; while (~scanf("%d",&N)) { printf("Case %d:\n",++nCase); for (int i = 0; i < N; i++) A[i] = i+1; do { int ok = 1; for (int i = 0; i < N-1; i++) { if (!prime[A[i] + A[i+1]]) { ok = 0; break; } } if (ok && prime[A[0]+A[N-1]]) { printf("%d",A[0]); for (int i = 1; i < N; i++) { printf(" %d",A[i]); } printf("\n"); } } while (next_permutation(A+1,A+N)); printf("\n"); } }
解法2:
递归搜索(+剪枝)
(一个PE搞了我好半天,本以为这个题跟Uva的一模一样......
Uva原文链接:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=465)
#include <cstdio> #include <cstring> using namespace std; bool vis[50],prime[50]; bool is_prime(int n) { for (int i = 2; i*i <= n; i++) if (!(n % i)) return 0; return 1; } void init() { for (int i = 0; i < 50; i++) prime[i] = is_prime(i); } void dfs(int *A,int cur,int n) { if (cur == n && prime[A[0] + A[n-1]]) { printf("%d",A[0]); for (int i = 1; i < n; i++) printf(" %d",A[i]); printf("\n"); } else { for (int i = 2; i <= n; i++) { if (!vis[i] && prime[i + A[cur-1]]) { A[cur] = i;//尝试在*A中填入各种数 vis[i] = 1; dfs(A,cur+1,n); vis[i] = 0;//记得一定得改回来(回溯常用技巧!!!) } } } } int main() { init(); // freopen("input.txt","r",stdin); memset(vis,0,sizeof(vis)); int A[30] = {1}; int N; int nCase = 1; while (~scanf("%d",&N)) { /* if (nCase > 1) printf("\n"); */ printf("Case %d:\n",nCase++); dfs(A,1,N); printf("\n");//如果是Uva上的素数环的话,就用上面的/*if (nCase > 1) printf("\n");*/ } }
转载于:https://blog.51cto.com/zhujifang/1380277
杭电ACM_1016_素数环相关推荐
- 浙江杭电计算机系的秦嘉珩,迎新季丨@2019级杭电小萌新,你们的最美辅导员上线啦!...
原标题:迎新季丨@2019级杭电小萌新,你们的最美辅导员上线啦! 2019级小萌新们 欢迎大家加入杭州电子科技大学 在即将开启的四年大学生活中 有这样一位亲切的老师 陪你军训,与你谈心,为你保驾护航 ...
- 【杭电ACM】1097 A hard puzzle
[杭电ACM]1097 A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...
- 【ACM】杭电OJ 1106 函数atoi
函数atoi是把字符串转化成整数的函数,头文件为 #include "stdlib.h" e.g. 运行环境:Dev-C++ 5.11 杭电1106 调用了sort函数,运行的时间 ...
- 【ACM】杭电OJ 2037
题目链接:杭电OJ 2037 先把b[i]进行排序,然后,b[i]与a[i+1]进行比较. #include <iostream> #include <cstdio> #inc ...
- 【ACM】杭电OJ 2020(排序)
题目链接:杭电OJ 2020 排序可以有冒泡排序,选择排序,或者直接调用函数. 下面是选择排序: #include <stdio.h> #include <math.h> in ...
- 【ACM】杭电OJ 2018
题目链接:杭电OJ 2018 从n>4开始,每一年的牛的数量=前一年的牛的数量+三年前的牛的数量 问:为什么是三年前? 答:假设三年前有一头小牛出生,出生的那一年即为第一年,到了第四年,即三年后 ...
- 【ACM】杭电OJ 1005
题目链接:杭电OJ 1005 超时代码如下(而且开辟的数组空间大小不够): #include <stdio.h> int m[100000]; int f(int n,int a,int ...
- 【ACM】杭电OJ 1004
题目链接:杭电OJ 1004 运行环境:Dev-C++ 5.11 思路: 先把先把num数组全部赋值为1:第一个颜色单独输入,从第二个开始,需要与前面的进行比较,如果前面有相同的颜色,则在目前的nu ...
- 【ACM】杭电OJ 2012。
题目链接:杭电OJ 2012 思路很简单,但是有一种高效算法显示编译错误,不知道为什么 运行环境:VS2017 AC代码: #include <stdio.h> #include < ...
最新文章
- 全球AI技术开放日系列之(七):走进阿里业务中台
- 详解COOKIE和SESSION关系和区别
- 如何計算SDRAM使用頻寬?
- Winform中使用mysqldump实现选择部分表定期备份mysql数据库
- 同软件多个线程设置不同ip_软件测试如何自学?收下这份《2020千锋性能测试入门视频教程》...
- 自己动手开发SAP Spartacus focus Directive的单元测试
- Hadoop(5)-Hive
- 【二分】抄书 (jzoj 2123)
- redis的内存优化【转】
- 数据结构 堆 栈 是什么 区别
- e盾网络验证源码_趣味设计模式系列:代理模式JDK动态代理源码解析,一文便知
- fastjson:map转json字符串、json字符串转map、map根据key名拿value、JSONArray转list
- Gradle初级使用教程
- 软件测试:什么是图灵测试
- 生信宝典:生物信息学习系列教程、视频教程
- java tar.gz 格式多文件打包压缩与解压
- 一个html页面请求多个接口,前端页面,一个页面几个接口请求比较合理?
- 微信小程序支付组件开发实战
- ST2Vec: Spatio-Temporal Trajectory Similarity Learning in Road Networks
- 前端开发免费学习资源分享
热门文章
- DCMTK:dcmseg模块的辅助功能
- DCMTK:DSRTree和DSRTreeNodeCursor类的测试程序
- VTK:小部件之HoverWidget
- QT的QSignalMapper类的使用
- 经典C语言程序100例之八三
- 经典C语言程序100例之七八
- c语言 百钱买百鸡问题
- 安装python应该先安装pycharm还是python_Pycharm及python安装详细步骤及PyCharm配置整理(推荐)...
- B15_NumPy 矩阵库(Matrix)(empty(),zeros(),ones(),eye(),identity(),rand())
- presto-server-0.198集群安装