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

    P1036 选数

     题解

    1.这道题是用递归做(貌似是DFS搜索与回溯,好像没有本质区别)

        dg ( last , now )  已经选了last个数,现在要选第now个数

       为了保证不重复,要选第now个数那就从编号now~n当中选数喽

    2.判断结果是不是素数

       不能用线性筛,范围太大太浪费(我用xxs WA了)

       要用试除法,1~√n

     代码

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int k,n,ans=0;
    int a[21],v[21];
    int sum=0;
    
    int scf(int shu)  //要用试除法,不能用线性筛 
    {
        for(int i=2;i<=sqrt(shu);i++)
          if(shu%i==0) return 0;
        return 1;
    }
    
    void dg(int last,int now)   //已经选了last个数字,现在要选第now个数 
    {
        for(int i=now;i<=n;i++)
        {
            v[i]=1;
            sum+=a[i];
            if(last+1==k)   //找全一组数据
            {
                if(scf(sum))  
                  ans++;
            }
               
            else             //没找够,继续找
               dg(last+1,i+1);
                   
            sum-=a[i];     //回溯
            v[i]=0;
        }
        
    }
    
    int main()
    {
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)
          scanf("%d",&a[i]);
        
        dg(0,1);    
        
        printf("%d",ans);
    }
  • 相关阅读:
    AutoFac学习笔记
    AutoMapper学习笔记
    ROSLYN 查看C#方法执行次数
    log4net 动态创建文件名
    WPF可切换按钮,iOS风格
    咕咕咕
    贪吃的小J
    UK Day15
    UK Day15
    UK Day15
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/10964177.html
Copyright © 2011-2022 走看看