洛谷新手村的一道题,简单题。
不过我怕自己sb了,以后不会做,所以先存着以后再看看。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,k,ans=0;
int a[30];
bool issushu(int n){
if(n==1) return false;
for(int i=2;i*i<=n;i++){
if(n%i==0) return false;
}
return true;
}
void dfs(int ll,int rr,int last,int sum){
if(last==0){
if(issushu(sum)){
ans++;
}
return;
}
for(int i=ll;i<rr;i++){
dfs(i+1,rr,last-1,sum+a[i]);
}
}
int main(){
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
dfs(0,n,k,0);
cout<<ans<<endl;
return 0;
}
就是dfs+判断素数;
ll,rr就是数组的左右范围,last就是还剩几个数可以选,sum就是现在的数加起来已经是多少了。