题目类型:DFS
题目链接:https://www.luogu.org/problemnew/solution/P1036
思路:先将数组进行排序,然后依次从左往右选出K个即可,这样可以保证k个数不被重复选择
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <set>
using namespace std;
int N,K;
int arr[20];
int total = 0;
void DFS(int coun,int cur,int lastindex);
bool ifprime(int n);
int main(){
cin>>N>>K;
for(int i = 0;i<N;i++){
cin>>arr[i];
}
sort(arr,arr+N);
for(int i = 0;i<N-K+1;i++){
DFS(1,arr[i],i);
}
cout<<total;
return 0;
}
void DFS(int coun,int cur,int lastindex){
if(coun == K &&ifprime(cur) ){
total++;
}
for(int i = lastindex+1;i<N;i++)
DFS(coun+1,cur+arr[i],i);
}
bool ifprime(int n){
if(n == 1)
return false;
if (n == 2)
return true;
for(int i = 2;i<=int(sqrt(n));i++){
if(n%i == 0){
return false;
}
}
return true;
}