嗨嗨嗨,又来了哦!今天给大家推出了洛谷P1036 [NOIP2002 普及组] 选数问题我懒得分析了,直接上代码。。。

#include <bits/stdc++.h>
using namespace std;
int n,k,a[30],ans=0;
bool is_pri(int x){//判断素数代码 
	if(x<2){
		return 0;
	}
	for(int i=2;i<=x/i;i++){
		if(x%i==0){
			return 0;
		}
	}
	return 1;
}
//选数个数,可选数起始下标
void dfs(int cnt,int idx,int sum){
	if(cnt==k){//选择了k个数,结束递归 
		if(is_pri(sum)){
			ans++;//答案个数+1 
		}
		return;//选了k个数就不再选了 
	}
	for(int i=idx;i<n;i++){//列举所有可选数下标 
		//不需要标记,因为往后选
		//选择第i个数
		//数字个数+1,后续选择数字的下标从i+1开始,和增加a[i] 
		dfs(cnt+1,i+1,sum+a[i]); 
		//不需要回溯 
	}
	return; 
} 
int main(){
	cin>>n>>k;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}//已经选择了0个数,可以从下标0的数开始选 
	//和当前为0 
	dfs(0,0,0);//参数记录状态 
	cout<<ans;
	return 0;
} 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐