1 solutions

  • 1
    @ 2024-12-21 16:32:48

    用集合去重,字符串存顺序进行递归

    #include<bits/stdc++.h>
    using namespace std;
    int n,k;
    int a[25]={};
    bool vst[25]={};
    set<string> s;
    bool isprime(int x){
    	for(int i=2;i<=x/2;i++) if(x%i==0) return 0;
    	return 1;
    }
    void dfs(int t,int sum,string sign){
    	if(t==k){
    		if(isprime(sum)) s.insert(sign);
    		return;
    	}
    	for(int i=0;i<n;i++){
    		if(!vst[i]){
    			vst[i]=1;
    			sign[i]='1';
    			dfs(t+1,sum+a[i],sign);
    			sign[i]='0';
    			vst[i]=0;
    		}
    	}
    }
    int main(){
    	cin>>n>>k;
    	for(int i=0;i<n;i++) cin>>a[i];
    	string x="";
    	for(int i=0;i<n;i++) x+='0';
    	dfs(0,0,x);
    	cout<<s.size()<<"\n";
    	return 0;
    }
    
    • 1

    Information

    ID
    299
    Time
    1000ms
    Memory
    125MiB
    Difficulty
    7
    Tags
    # Submissions
    22
    Accepted
    7
    Uploaded By