1 条题解
-
1
#include<bits/stdc++.h> using namespace std; int n; int a[25]; int ans; bool is_prime(int x) { if (x < 2) return false; for (int i = 2; i * i <= x; i++) if (x % i == 0) return false; return true; } int dis[10];//dis[i]:第i个数选择ans[i] bool vis[10];//vis[i]:a[i]有没有被选过 bool check(int nn){ int X=0; for(int i=1;i<=nn;i++) X+=i*dis[i]; return is_prime(X); } //当前考虑选谁作为第step个数 void dfs(int step){ //之前已经选了step-1个数 if(check(step-1)) ans++; if(step==n+1) return; //考虑第step个数选谁? for(int i=1;i<=n;i++){ if(!vis[i]) { //记录 vis[i]=true; dis[step]=a[i]; //做下一步 dfs(step+1); //取消记录 vis[i]=false; dis[step]=0; } } } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; ans=0; dfs(1); cout<<ans<<"\n"; return 0; }
- 1
信息
- ID
- 1135
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 55
- 已通过
- 34
- 上传者