站外题求条,玄关
  • 板块灌水区
  • 楼主hattt
  • 当前回复4
  • 已保存回复4
  • 发布时间2025/1/20 16:25
  • 上次更新2025/1/20 19:37:34
查看原帖
站外题求条,玄关
1100695
hattt楼主2025/1/20 16:25

已知n个整数x1,x2,x3……xn以及⼀个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到⼀系列的和.

现在,要求你计算出和为素数共有多少种

输⼊格式

n,k

x1,x2……xn

输出格式

一个整数,表示满足条件的种数

代码(16T,4WA)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,k,sum,cnt;
int a[25],s[25];//a表示第i个数的编号,s表示第i个数的值 
bool vis[25];
bool is_prime(int x){
	for(int i=2;i<sqrt(x);i++){
		if(x%i==0){
			return false;
		}
	}
	return true;
}
void dfs(int x) { 
	if(x>k){//选完了 
		if(is_prime(sum)) cnt++;
		return;
	}
	for(int i=x+1;i<=n;i++){//编号为x+1到n 
		if(vis[i]) continue;//编号为i的数已使用 
		sum+=s[i];//求和 
		vis[i]=1;//使用过 
		a[x+1]=i;
		dfs(x+1);//递归 
		sum-=s[i];//清空 
		vis[i]=0;
		a[x+1]=0; 
	}
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	sort(s+1,s+n);
	dfs(1);
	cout<<cnt;
	return 0;
}
2025/1/20 16:25
加载中...