求助QwQ
查看原帖
求助QwQ
763566
Accepted_please楼主2023/5/29 19:29
//P1036 [NOIP2002 普及组] 选数
#include<bits/stdc++.h>
using namespace std; 
int a[25];
const int m=1e6+7;
int vis[m]={0};
int ans=0,sum=0;
int n,k;
bool prime(int k)
{
	if(k<2)
	{
		return false;
	}
	for(int i=2;i*i<=k;i++)
	{
		if(k%i==0)
		{
			return false;
			break;
		}
	}
	return true;
}
void dfs(int t,int s,int sum)//当前位置,个数,和累加 
{
	if(s==k && prime(sum))//凑够k个数,并且答案加1,并返回 
	{
		ans++;
		return;//注意返回 
	}
	for(int i=t;i<=n;i++)
	{
		if(!vis[i])
		{
			vis[i]=1;
			dfs(i+1,s+1,sum+a[i]);
			vis[i]=0;//已经被用过 
		}
	}
}
int main()
{
	cin>>n>>k; 
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	dfs(1,1,0);
	cout<<ans;
    return 0;
}
2023/5/29 19:29
加载中...