POJ2034 Anti-prime Sequences【素数筛法】【DFS】
来源:互联网 发布:淘宝女用催情药 编辑:程序博客网 时间:2024/06/08 02:09
题目链接:
http://poj.org/problem?id=2034
题目大意:
给你三个整数 N、M、D。使得从 N 到 M 的自然数按要求排列后,相邻且连续的
D 个数内的自然数和为非素数。找到字典序最小的排列并输出,如果找不到则输出
"No anti-prime sequence exists."。
解题思路:
用深搜来做,一步一步的确定第 Cnt 个数,直到找到 M-N+1 个数,并满足要求为
止。判断相邻数的和是否为非素数可以用筛法求素数事先预处理一下。
AC代码:
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;const int MAXN = 1010;bool Prime[MAXN*10],vis[MAXN];int Ans[MAXN];int N,M,D;void IsPrime(){ Prime[0] = Prime[1] = false; for(int i = 2; i < MAXN*10; ++i) Prime[i] = true; for(int i = 2; i < MAXN*10; ++i) if(Prime[i]) for(int j = i+i; j < MAXN*10; j+=i) Prime[j] = false;}int Judge(int Cnt,int Value){ int sum,ValueLeft; ValueLeft = Cnt - D + 1; if(ValueLeft < 0) ValueLeft = 0; sum = Value; for(int i = Cnt-1; i >= ValueLeft; i--) { sum += Ans[i]; if(Prime[sum]) //连续2、3、…、D个数的和都为素数才满足 return false; } return true;}int Dfs(int Cnt){ if(Cnt == M-N+1) return true; for(int i = N; i <= M; ++i) { if(!vis[i] && Judge(Cnt,i)) { Ans[Cnt] = i; vis[i] = true; if(Dfs(Cnt+1)) return true; vis[i] = false; } } return false;}int main(){ IsPrime(); while(~scanf("%d%d%d",&N,&M,&D) && (N||M||D)) { memset(vis,0,sizeof(vis)); if(Dfs(0)) { for(int i = 0; i <= M-N; ++i) if(i != M-N) printf("%d,",Ans[i]); else printf("%d\n",Ans[i]); } else printf("No anti-prime sequence exists.\n"); } return 0;}
0 0
- POJ2034 Anti-prime Sequences【素数筛法】【DFS】
- POJ2034 Anti-prime Sequences初等数论
- POJ 2034 Anti-prime Sequences(素数预处理+DFS回溯)
- <poj,sicily>Anti-prime Sequences (DFS)
- 【hdu】 Anti-prime Sequences (DFS)
- poj 2034 Anti-prime Sequences(dfs)
- poj 2034 Anti-prime Sequences(dfs)
- poj 2034 Anti-prime Sequences(dfs)
- [水+dfs] poj 2034 Anti-prime Sequences
- <DFS> POJ 2034 Anti-prime Sequences
- POJ 2034 Anti-prime Sequences DFS+质数
- 素数判断+DFS POJ2034
- 1002: Anti-prime Sequences
- 1002. Anti-prime Sequences
- 1002. Anti-prime Sequences
- 1002. Anti-prime Sequences
- 1002. Anti-prime Sequences
- soj1002 Anti-prime Sequences
- 数值概率算法
- Java反射基础(三)--Methods对象的使用
- 《C++并发编程实战》读书笔记3---线程同步
- android中如何获取视频文件的第一祯并显示在imageview上
- 概率算法
- POJ2034 Anti-prime Sequences【素数筛法】【DFS】
- 音效播放小demo
- Android 如何在自定义界面上启用输入法 (How to enable inputmethod for the custom UI)
- 位运算
- Unity中贴图的导入
- 为何机器学习的黄金时代才刚刚来临
- 炫酷的滑动效果
- ubuntu设置静态IP
- 【Android成长之路】全局大喇叭——广播机制的浅谈(接收系统广播与动、静态注册接收器)