洛谷P1036
此题可以用暴力解决,但我希望使用搜索解决。
// Problem: P1036 [NOIP2002 普及组] 选数
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1036
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<iostream>
using namespace std;
int n,k;//n为数列的个数,k为选数的个数
bool zhi(int s)
{
if(s==0||s==1) return false;
else for(int i=2;i*i<=s;i++)
if(s%i==0) return false;
return true;
}
int ans=0;
int arr[30];
int num=0;
int sum=0;
bool brr[30];
void print(bool b[])
{
for(int i=1;i<=n+3;i++)
cout<<b[i]<<" ";
}
void dfs(int x)
{
if(num==k)
{
if(zhi(sum)) ans++;
return;
}
for(int i=x;i<=n;i++)
if(!brr[i])
{
num++;
sum+=arr[i];
brr[i]=true;
dfs(x+1);
num--;
sum-=arr[i];
brr[i]=false;
}
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>arr[i];
dfs(1);
cout<<ans<<endl;
return 0;
}
为何只得了16分?
麻烦各位[旺柴]
