博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
选数 2002年NOIP全国联赛普及组
阅读量:5825 次
发布时间:2019-06-18

本文共 1164 字,大约阅读时间需要 3 分钟。

题目描述 
Description

已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为:

    3+7+12=22  3+7+19=29  7+12+19=38  3+12+19=34。
  现在,要求你计算出和为素数共有多少种。
  例如上例,只有一种的和为素数:3+7+19=29)。

输入描述 
Input Description

 键盘输入,格式为:

  n , k (1<=n<=20,k<n)
  x1,x2,…,xn (1<=xi<=5000000)

输出描述 
Output Description

屏幕输出,格式为:

  一个整数(满足条件的种数)。

样例输入 
Sample Input

4 3

3 7 12 19

样例输出 
Sample Output

1

数据范围及提示 
Data Size & Hint

(1<=n<=20,k<n)

(1<=xi<=5000000)

有技巧的深搜加素數判斷。

代碼實現:

1 #include
2 using namespace std; 3 int n,k,ans,s[30]; 4 bool v[30010]; 5 void dfs(int x,int y,int z){ 6 if(y==k){ 7 if(!z||z==1||((z%2==0)&&z!=2)) return; 8 for(int i=3;i*i<=z;i+=2) 9 if(z%i==0) return;10 ans++;return;11 }12 for(int i=1;i<=n;i++){13 if(!v[i]&&i>x){14 v[i]=1;15 dfs(i,y+1,z+s[i]);16 v[i]=0;17 }18 }19 }20 int main(){21 scanf("%d%d",&n,&k);22 for(int i=1;i<=n;i++) scanf("%d",&s[i]);23 dfs(0,0,0);24 printf("%d\n",ans);25 return 0;26 }
View Code

不大會來著。

转载于:https://www.cnblogs.com/J-william/p/6068407.html

你可能感兴趣的文章
Go开发之路(目录)
查看>>
RHEL6.5安装成功ORACLE11GR2之后,编写PROC程序出错解决方法
查看>>
(50)与magento集成
查看>>
Ubuntu设置python3为默认版本
查看>>
JsonCpp 的使用
查看>>
问题账户需求分析
查看>>
JavaSE-代码块
查看>>
爬取所有校园新闻
查看>>
32、SpringBoot-整合Dubbo
查看>>
python面向对象基础
查看>>
HDU 2044 一只小蜜蜂(递归)
查看>>
docker 下 安装rancher 笔记
查看>>
spring两大核心对象IOC和AOP(新手理解)
查看>>
数据分析相关
查看>>
Python LDAP中的时间戳转换为Linux下时间
查看>>
微信小程序蓝牙连接小票打印机
查看>>
环境错误2
查看>>
C++_了解虚函数的概念
查看>>
全新jmeter视频已经上架
查看>>
Windows 8下如何删除无线配置文件
查看>>