题目链接:https://www.luogu.com.cn/problem/P1036
题目描述:
利用深度优先搜索遍历所有选的方案,记录符合题目要求的数,也就是次数等于K并且是素数的方案。对每个数来说有两种可能,选或者是不选,选的话是次数加1,和加上所选的数。
代码如下:#includeusing namespace std; int a[1055]; int n,m,s=0; int sushu(int k){ if(k<=3){ return 1; } for(int i=2;i<=sqrt(k);i++){ if(k%i==0){ return 0; } } return 1; } void dfs(int st,int c,int sum){ if(st>=n+1){//选完了,递归出口 if(c==m)//次数相等 if(sushu(sum)){//是素数 s++; } return ; } dfs(st+1,c+1,sum+a[st]);//选 dfs(st+1,c,sum);//不选 } int main() { cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; } dfs(1,0,0); cout<


![洛谷 P1036 [NOIP2002 普及组] 选数 洛谷 P1036 [NOIP2002 普及组] 选数](http://www.mshxw.com/aiimages/31/917283.png)
