zoukankan      html  css  js  c++  java
  • 洛谷 P1036 选数

    题目:https://www.luogu.org/problemnew/show/P1036


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

    思路:

    在n个数和每k个数这两个范围中进行搜索,然后看加起来的和是否为素数即可(详细的也不会说...注意边界条件为n个数全搜完和已经搜完k个数判断后...

    大体过程:
    主函数输入输出调用----->is_prime函数判断是否为素数------->深搜

    下面是AC代码:
     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cmath>
     4 
     5 using namespace std;
     6 
     7 int x[5000005], n, k, total;
     8 inline bool is_prime(int x){
     9     for(int i = 2; i <= sqrt(x); i++)
    10         if(x % i == 0) return false;
    11     return true;
    12 } //筛素数 
    13 
    14 inline void dfs(int step, int sum, int cnt){
    15     if(step == n + 1 || cnt == k){ // 如果已经进行到了n+1次或者是已经有k个数, 
    16         if(is_prime(sum) && cnt == k)//判断选k个数后的和是否为素数 
    17             total++; // 方案+1 
    18         return;
    19     }
    20     dfs(step+1, sum + x[step], cnt+1);//继续搜索,选择下一个数 
    21     dfs(step+1, sum, cnt);//继续枚举不选择下一个数的情况 
    22     return;
    23 }//深搜 
    24 int main(){
    25     scanf("%d%d", &n, &k);
    26     for(int i = 1; i <= n; i++){
    27         scanf("%d", &x[i]);
    28     }
    29     dfs(1, 0, 0);
    30     printf("%d", total);
    31     return 0;
    32 }

     

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

  • 相关阅读:
    【对拍√】
    hdu5791 TWO
    luogu P1220 关路灯
    【NOI2001】食物链
    【HAOI2016】食物链
    luogu P1006 传纸条
    可持久化平衡树
    可持久化并查集
    线段树合并(【POI2011】ROT-Tree Rotations)
    可持久化数组
  • 原文地址:https://www.cnblogs.com/New-ljx/p/10626720.html
Copyright © 2011-2022 走看看