#include<iostream>
using namespace std;
int x[20], n, k;
bool cheak(int n) { //普通筛质数
for(int i=2; i<=n/i; i++)
if(n%i==0)return false;
return true;
}
int dfs(int p, int ssum, int start) { //变量分别是已选数量,已选数之和,递增原则的指针
if(p == k) return cheak(ssum); //类似树状的统计总数,从底层加到顶层
int sum=0;
for(int i=start; i<=n-1; i++){
sum += dfs(p+1, ssum+x[i], i+1);
}
return sum;
}
int main(){
cin>> n>> k;
for(int i=0; i<n; i++) cin>>x[i];
cout<<dfs(0,0,0);
}
洛谷 普及- P1036 选数 DFS
于 2024-01-08 18:53:24 首次发布
![](https://img-home.csdnimg.cn/images/20240709112858.png)