无法通过2,6测试点,是什么地方疏忽了呢?求指导
查看原帖
无法通过2,6测试点,是什么地方疏忽了呢?求指导
1257536
S1417830194楼主2024/3/11 19:08
#include <iostream>
#include <vector>
#include <cstring>
#include <cmath>
using namespace std;

int n,k,num=0;
int DFS(int index, long long sum,int sumN,vector<long long> vec);
int isPrime(long long n);

int main()
{
	long long temp,sum=0;
	cin>>n>>k;
	vector<long long> vec;
	
	//初始化 
	for(int i=0;i<n;i++)
	{
		cin>>temp;sum+=temp;
		vec.push_back(temp);
	}

	DFS(0,0,0,vec);
	cout<<num;
	
	return 0;
} 

int IfinSSB(int x,int* ssb)
{
	return ssb[x]==1;
}

int DFS(int index, long long sum,int sumN,vector<long long> vec)  //深搜确定所有情况 
{
	if(sumN>=k || index>=n) return 0;  //选超过k个数或者到达可选数的最后一个数 
	
	if( sumN+1==k && isPrime( sum+vec[index] ) ) 
		num++;
		
	DFS(index+1,sum,sumN,vec);   //不选 
	DFS(index+1,sum+vec[index],sumN+1,vec);  //选 
	
	return 0;
}

int isPrime(long long n) //判断是否是素数 
{
	if( n<=1 ) return 0;
	long sqr=(long)sqrt(1.0*n);
	
	for(long long i=2;i<sqr;i++)
		if(n%i==0) return 0;
		
	return 1;
}

2024/3/11 19:08
加载中...