洛谷 P1036 选数

嗯....

这种类型的题在新手村出现还是比较正常的,

但是不知道为什么它的分类竟然是过程函数与递归!!!(难道这不是一个深搜题吗???

好吧这就是一道深搜题,所以千万别被误导...

先看一下题目:https://www.luogu.org/problemnew/show/P1036

一道比较典型的深搜...

思路:

在n个数和每k个数这两个范围中进行搜索,然后看加起来的和是否为素数即可(详细的也不会说...注意边界条件为n个数全搜完和已经搜完k个数判断后... 大体过程:
主函数输入输出调用----->is_prime函数判断是否为素数------->深搜 下面是AC代码:
 #include<cstdio>
#include<iostream>
#include<cmath> using namespace std; int x[], n, k, total;
inline bool is_prime(int x){
for(int i = ; i <= sqrt(x); i++)
if(x % i == ) return false;
return true;
} //筛素数 inline void dfs(int step, int sum, int cnt){
if(step == n + || cnt == k){ // 如果已经进行到了n+1次或者是已经有k个数,
if(is_prime(sum) && cnt == k)//判断选k个数后的和是否为素数
total++; // 方案+1
return;
}
dfs(step+, sum + x[step], cnt+);//继续搜索,选择下一个数
dfs(step+, sum, cnt);//继续枚举不选择下一个数的情况
return;
}//深搜
int main(){
scanf("%d%d", &n, &k);
for(int i = ; i <= n; i++){
scanf("%d", &x[i]);
}
dfs(, , );
printf("%d", total);
return ;
}

嗯... 关于深搜就是这样 ...

上一篇:unity3d工程下的data file作用


下一篇:Androd安全——混淆技术完全解析