资深光能
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int n,r,data[400],count;
bool used[400];
bool sushu(int x)
{
if(x==1)return false;
if(x==2)return true;
for(int i=2;i<=sqrt(x);i++)
if(x%i==0)
return false;
return true;
}
void search(int t,int sum,int pre)
{
if(t>r)
{
if(sushu(sum))count++;
return ;
}
else
{
for(int i=pre+1;i<=n;i++)
{
search(t+1,sum+data[i],i);
}
}
}
int main()
{
memset(used,0,sizeof(used,0));
cin>>n>>r;
for(int i=1;i<=n;i++)
cin>>data[i];
if(r==0)
return 0;
search(1,0,0);
cout<<count;
return 0;
}
怎么错了啊,为什么
4 2
1 3 3 4
过不了
怎们改啊???
高级光能
//判断素数
void search(int t,int sum,int start)
{
if (t>k)
{
if (sushu(sum))
{
ans++;
}
return ;
}
else
{
for (int i=start;i<=n;i++)
{
search(t+1,sum+a[i],i+1);
}
}
}
核心代码 最后输出ans就OK了
初级天翼
void dfs (int t,int start)
{
if (t>k)
{
int sum=0;
for (int i=1;i<=k;i++)
{
sum+=x[ans[i]];
}
if (zhishu(sum))
{
++count;
}
return;
}
for (int i=start+1;i<=n;i++)
{
if (!used[i])
{
used[i]=true;
ans[t]=i;
dfs(t+1,i);
ans[t]=0;
used[i]=false;
}
}
}
这是我自己做的,如果不好,请原谅!!
资深天翼
搜索
void search(int t,int s,int total) { if(total==m&&t>n) { if(pd(s)) { ans++; } return; } if(t>n) return; if(total<m) search(t+1,s+a[t],total+1); search(t+1,s,total); }
高级光能
bool judge(int x)
{
if(x==1)
return 0;
if(x==2)
return 1;
for(int i=2;i*i<=x;i++)
if(x%i==0)
return 0;
return 1;
}
void dfs(int s,int t,int id)
{
if(judge(s)&&t==m)
{
num++;
return;
}
if(t>m)
return;
for(int i=id+1;i<=n;i++)
dfs(s+a[i],t+1,i);
}