1 solutions
-
1
用集合去重,字符串存顺序进行递归
#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