【dfs】选数

在这里插入图片描述
洛谷新手村的一道题,简单题。
不过我怕自己sb了,以后不会做,所以先存着以后再看看。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,k,ans=0;
int a[30];
bool issushu(int n){
	if(n==1) return false;
	for(int i=2;i*i<=n;i++){
		if(n%i==0) return false;
	}
	return true;
}
void dfs(int ll,int rr,int last,int sum){
	if(last==0){
		if(issushu(sum)){
			ans++;
		}
		return;
	}
	for(int i=ll;i<rr;i++){
		dfs(i+1,rr,last-1,sum+a[i]);
	}
}
int main(){
	scanf("%d %d",&n,&k);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	dfs(0,n,k,0);
	cout<<ans<<endl;
	return 0;
}

就是dfs+判断素数;
ll,rr就是数组的左右范围,last就是还剩几个数可以选,sum就是现在的数加起来已经是多少了。

发布了62 篇原创文章 · 获赞 0 · 访问量 666

猜你喜欢

转载自blog.csdn.net/weixin_44745441/article/details/104800503