zoukankan      html  css  js  c++  java
  • 深搜--P1036选数

    深搜中绝对会用到递归

    因此本题也可以使用深搜来做

    bool prime(int b) {
        memset(sz, true, sizeof(sz));
       sz[1]=false;
        for (int i=2;i<=b;i++) {
            if (sz[i]) {
                for (int j=2*i;j<=b;j+=i)
                    sz[j]=false; 

    定义一个dfs函数来解决对数的搜索

    step代表执行步数

    sum代表已经选好的数据的和

    cet代表已经选完的数的个数

    接下来进行搜索

    另外介绍下非朴素版的寻找质数的方法

    被人称作爱氏筛法

    但是呢,我在本题中并未使用

    深搜程序:

    #include<cstdio>
    #include<cmath>
    #include<cstdio>
    using namespace std;
    int a[10001];
    int n,k,tot,sum;
    inline bool prime(int);
    inline void dfs(int,int ,int);
    inline void print()
        {
            printf("%d",tot);
        }
    int main()
    {
        scanf("%d%d",&n,&k);
        for(register int i=1;i<=n;i++)
           scanf("%d",&a[i]);
        dfs(1,0,0);
        print();
        return 0;
    }
    bool prime(int l)
    {
    
        for(int i=2;i<=sqrt(l);i++)
        {
            if(l%i==0) return false;
    
        }
        return  true;
    
    
        
    
    }
    void dfs(int step,int sum,int cet)
    {
        if(step==n+1||cet==k)
        {
            if(prime(sum)&&cet==k)
              tot++;
            return;
        }
        dfs(step+1,sum+a[step],cet+1);
        dfs(step+1,sum,cet);
        return;
    }

    爱氏筛法

  • 相关阅读:
    Linux 之 文件压缩解压
    Linux 之 文件搜索命令
    Linux 之 文件内容查看
    Linux 之 Vim常用命令
    Linux 之 CentOS练习
    CentOS找不到想要的镜像版本?
    Swoole 简单学习(2)
    Swoole 简单学习
    svn的简单知识
    8、16、32-BIT系列单片机区别与特点
  • 原文地址:https://www.cnblogs.com/-Iris-/p/12257529.html
Copyright © 2011-2022 走看看