dfs,33分,求错
查看原帖
dfs,33分,求错
635829
D_FANG楼主2022/8/23 20:37
#include<bits/stdc++.h>
using namespace std;
int n,k;
long long a[22],b[22],vis[22],j,s[110000],ans;
void dfs(int x){
	if (x==k+1){
		++j;
		for (int i=1;i<=k;i++){
			s[j]+=b[i];
		}
		return ;
	}
	for (int i=1;i<=n;i++){
		if (vis[i]==false){
			b[x]=a[i];
			vis[i]=true;
			dfs(x+1);
			vis[i]=false;
		}
	}
}
int f (long long x){
	if (x<=1) return 0;
	if (x==2) return 1;
	for (long long i=2;i<=sqrt(x);i++){
		if (x%i==0) return 0;
	}
	return 1;
}
int main(){
	cin>>n>>k;
	for (int i=1;i<=n;i++){
		cin>>a[i];
	}
	dfs(1);
	ans=0;
	sort(s+1,s+j+1);
	for (int i=2;i<=j;i++){
		if (s[i]!=s[i-1]&&f(s[i-1])==1){
			ans++;
		}
	}
	if (f(s[j])==1) ans++;
	cout<<ans;
	return 0;
}
2022/8/23 20:37
加载中...