洛谷P1036 选数

发布时间 2023-03-26 10:05:40作者: 一书纸歌
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,k,a[25];
 4 int hk;//这个是k个数加起来的和
 5 int sum;//这个是个数(输出的那个) 
 6 int pdzhi(int x){//判断是否为质数 
 7     for(int i=2;i<x;i++){
 8         if(x%i==0) return 0;
 9     }
10     return 1;
11 }
12 void sx(int xa,int b)//其中xa代表差几个够k个数,b表示选到了第几个数 对4个数里面进行逐个筛选 如123 124 132 134
13 {
14     if(xa==0) //选完了 也就是a==k 
15     {
16         sum+=pdzhi(hk);
17     } 
18     else {
19         b++;
20         for(int i=b;i<=n;i++)
21         {
22             hk+=a[i];//统计和
23             xa--;
24             sx(xa,i);//直接用递归列举  
25             hk-=a[i];//对前面数字的一个小清空 1 2 3>1 2>1
26             xa++; 
27         }
28     }
29 }  
30 int main()
31 {
32     cin>>n>>k;
33     for(int i=1;i<=n;i++)
34     {
35         cin>>a[i]; 
36     }
37     sx(k,0);
38     cout<<sum;
39     return 0;
40 }