洛谷 P1036 选数

洛谷传送门

JDOJ 1297: [NOIP2002]选数 T2

JDOJ传送门

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

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

Output

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

Sample Input

4 3 3 7 12 19

Sample Output

1

题解:

本题考查的知识点:递归生成全排列,质数判断。

递归生成全排列的相关知识:

相关知识—全排列传送门

相关知识—质数判断传送门

思路:

我们要枚举\(n\)数中\(k\)个数的全排列之和有多少是质数,需要生成全排列再判断一下质数即可,如果依次枚举无疑会超时,所以我们想出递归深搜来优化这个问题:

我们搜索的时候需要维护这么几个参数:首先是还剩多少个数没有选进去,然后是已经选进去的和是多少,最后是剩下数字的选取范围。

所以我们有如下的递归思路:

假如k==0,说明我们已经有了一个全排列,这时候需要判断,否则,就进入选取环节:从start到end枚举递归深搜,累加和。这样就得到了我们要求的答案。

代码:

#include<cstdio>
#include<cmath>
using namespace std;
int n,k;
int a[21];
bool check(int x)
{
for(int i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
return 1;
}
int dfs(int k,int sum,int start,int end)
{
if(k==0)
return check(sum);
int tot=0;
for(int i=start;i<=end;i++)
tot+=dfs(k-1,sum+a[i],i+1,end);
return tot;
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
printf("%d",dfs(k,0,1,n));
return 0;
}

NOIP 2002 选数的更多相关文章

  1. NOIP 2002 产生数

    洛谷 P1037 产生数 https://www.luogu.org/problemnew/show/P1037 JDOJ 1298: [NOIP2002]产生数 T3 https://neooj.c ...

  2. NOIP 2002提高组 选数 dfs/暴力

    1008 选数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知 n 个整数 x1,x2,…, ...

  3. 1008 选数 2002年NOIP全国联赛普及组

    1008 选数 2002年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description ...

  4. codevs——1008 选数

    1008 选数 2002年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 已知 n ...

  5. 【BZOJ-2732】集合选数 状压DP (思路题)

    2734: [HNOI2012]集合选数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1070  Solved: 623[Submit][Statu ...

  6. CODE VS1008选数

    #include<cstdlib> #include<cstdio> #include<iostream> #include<cmath> #inclu ...

  7. BZOJ 3930: [CQOI2015]选数 递推

    3930: [CQOI2015]选数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pro ...

  8. bzoj 2734: [HNOI2012]集合选数 状压DP

    2734: [HNOI2012]集合选数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 560  Solved: 321[Submit][Status ...

  9. BZOJ3930: [CQOI2015]选数

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3930 容斥原理. 令l=(L-1)/k,r=R/k,这样找k的倍数就相当于找1的倍数. 设F[ ...

随机推荐

  1. JVM系列之六:内存溢出、内存泄漏 和 栈溢出

    1. OOM && SOF OutOfMemoryError异常: 除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能, 内存 ...

  2. 第四次实验报告:使用Packet Tracer理解RIP路由协议

    目录 1 实验目的 2 实验内容 3. 实验报告 3.1 建立网络拓扑结构 3.2 配置参数 3.3 测试网络连通性 3.4 理解RIP路由表建立和更新 4. 理解RIP消息传得慢 5. 拓展 1 实 ...

  3. FontForge:免费字库设计软件 附使用教程

    引用:http://www.sucaijishi.com/2018/articles_0817/259.html 如何设计一套自己的字库?今天分享一个开源的字库设计软件FontForge, 官方下载: ...

  4. jenkins pipeline 复杂的发布流程

    1.参数化构建界面 2.交付流水线界面 3.脚本详解 #!groovy pipeline { //在任何可用的代理上执行Pipeline agent any //参数化变量,目前只支持[boolean ...

  5. 基于opencv+python的二维码识别

    花了2天时间终于把二维码识别做出来了,不过效果一般,后面会应用在ROS辅助定位上,废话少说先上图: 具体过程参考了这位大神的博客:http://blog.csdn.net/qq_25491201/ar ...

  6. Django-orm高级

    ORM字段 orm常见字段 https://www.cnblogs.com/liuqingzheng/articles/9627915.html choice字段注释与数据渲染 性别 sex_choi ...

  7. Prometheus 安装Alertmanager集成

    Prometheus 安装Alertmanager集成 # 下载地址 地址1:https://prometheus.io/download/ 地址2:https://github.com/promet ...

  8. jQuery浮窗图片到页面中间的代码

    jQuery浮窗图片到页面中间的代码 <!doctype html> <html> <head> <meta charset="utf-8" ...

  9. 关于thinkphp3.2.3集成phpmailer

    关于thinkphp3.2.3集成phpmailer 1 我用的是phpmailer5.1的版本  先把文件解压缩放到这个位置 2 封装到函数里面 function email($email,$tit ...

  10. 初识Markdown

    目录 一.基础语法 二.语法规则 1.标题 2.列表 3.文字格式 4.链接 5.图片 6.引用 7.水平分隔线 8.代码块 9.表格 10.文档目录 11.转义定义 写在前面 Markdown(简称 ...