POJ 2034 Antiprime Sequences (筛素数+DFS)

题目链接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;
}
 
举杯独醉,饮罢飞雪,茫然又一年岁。 ------AbandonZHANG
原文地址:https://www.cnblogs.com/AbandonZHANG/p/4114196.html