【模拟】选数 luogu-1037

AC代码

#include <bits/stdc++.h>
using namespace std;
#define ms(a,b) memset(a,b,sizeof(a))
typedef long long ll;
int n,k,ans;
int x[25];
inline int read(){
    int X=0,w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    return w?-X:X;
}
bool prime(int x) {
	if (x==1||x==0) return false;
	for (int i=2;i<=floor(sqrt(x));i++) if (x%i==0) return false;
	return true;
}
void dfs(int cnt,int id,int sum) {
	if (cnt==k) {
		if (prime(sum)) {
			++ans;
			return;
		}
	}
	for (int i=id+1;i<=n;i++) {
		dfs(cnt+1,i,sum+x[i]);
	}
}
int main(int argc,char* argv[]){
	n=read(),k=read();
	for (int i=1;i<=n;i++) x[i]=read();
	sort(x+1,x+1+n);
	ans=0;
	dfs(0,0,0);
	printf("%d
",ans);
	return 0;
}

原文地址:https://www.cnblogs.com/Dawn-Star/p/9688533.html