题目链接:
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;
}