您的位置:首页 > 产品设计 > UI/UE

POJ 2034 Anti-prime Sequences (筛素数+DFS)

2013-01-10 12:44 302 查看
题目链接:http://poj.org/problem?id=2034

题目大意:输入m, n, d,求出m,m+1,m+2,````m+n的一个排列。使得任意的连续k个数之和都为合数,2<=k<=d。

思路:暴力DFS,依次枚举第一个数,第二个数····,第n-m+1个数即可.但是本人并不是很清楚为什么DFS不会超时……粗略看了一下觉得可能是当m-n远大于d时一定有解,所以不会出现无解遍历完的情况……

#include
#include
#include
using namespace std;
int n, m, d;
int a[1100];
int sum[11];
int noprime[11100];
int vis[1110];
bool okflag;
void Prime(int n){
for (int i = 2; i * i <= n; i ++){
if (!noprime[i]){
int p = i + i;
while(p <= n){
noprime[p] = 1;
p += i;
}
}
}
}
void dfs(int p){
if (okflag == 1)
return ;
if (p > m - n + 1){
for (int i = 1; i < p - 1; i ++){
cout << a[i] << ",";
}
cout << a[p-1] <> n >> m >> d){
if (n + m + d == 0){
return 0;
}
memset(vis, 0, sizeof(vis));
okflag = 0;
dfs(1);
if (okflag == 0){
cout << "No anti-prime sequence exists." << endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: