题目描述

传送门:https://www.luogu.com.cn/problem/P1036
已知n个整数x1,x2…xn,以及一个整数k(k<n)。从n个数字中任选k个数字相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,9时,可得全部组合和它们的和为:
3+7+12=22

3+7+19=293+7+19=29

7+12+19=387+12+19=38

3+12+19=343+12+19=34。

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

例如上例,只有一种的和为素数:3+7+19=293+7+19=29。

输入格式

键盘输入,格式为:
n,k(1<=n<=20,k<n)
x1,x2…xn(1<=xi<=5000000)

输出格式

屏幕输出,格式为: 1个整数(满足条件的种数)。

输入样例

4 3
3 7 12 19

输出样例

1

这里采用深度优先搜索,但是选数的难点在于递归中怎样选择不重复的k个数字,我们可以采用单调不降原则。
例如,我们从6个数字1 2 3 4 5 6中选择三个数字,怎样选择?
1 2 3
1 2 4
1 2 5
1 2 6
这是第一轮的枚举
那么下一轮的枚举,我们将第二个数字加1:
1 3 4
1 3 5
1 3 6
当第一个数字变为2时,
2 3 4
2 3 5
2 3 6
2 4 5
2 4 6
2 5 6
依此类推…
其他枚举可能
3 4 5
3 4 6
3 5 6
4 5 6
重复上述过程,第一个数字一次变为 2 3 4 5 6即可。
这样可以避免重复的选取,那体现在输入的数字上,我们可以依靠索引,逐步选取当前选择索引之后的元素,即可避免重复。

程序实现:

#include<bits/stdc++.h>
using namespace std;int n, k;
int a[25];
int ans = 0;
bool isprime(int num)//素数判断 不用多说
{for (int i = 2; i <= sqrt(num); i++)if (num % i == 0)return false;return true;
}void dfs(int m, int sum, int start)
{if (m == k){if (isprime(sum)) {ans++;return;//如果满足选取了k个数组 且满足素数要求 直接累加  返回}}for (int i = start; i < n; i++)//选取个数加以  sum累加  索引加一dfs(m + 1, sum + a[i], i + 1);//从当前索引依次递归后续元素//即加入选取了1 那么之后的递归选取为 a[1]a[2],a[1]a[3],a[1]a[4]......
}
int main()
{cin >> n >> k;for (int i = 0; i < n; i++)cin >> a[i];dfs(0, 0, 0);//初始状态深搜cout << ans << endl;
}

算法参考:https://www.luogu.com.cn/user/120868

【洛谷】选数---深度优先搜索+单调不降去重相关推荐

  1. 洛谷 2921 记忆化搜索 tarjan 基环外向树

    洛谷 2921 记忆化搜索 tarjan 传送门 (https://www.luogu.org/problem/show?pid=2921) 做这题的经历有点玄学,,起因是某个random题的同学突然 ...

  2. 洛谷P3939 数颜色 vector乱搞

    洛谷P3939 数颜色 标签 vector乱搞 简明题意 给一个序列(n <= 3e5),现需要你支持两种操作. 询问区间[L,R]中有多少个值为x的数 交换第k和k+1个数 思路 首先,这题需 ...

  3. 洛谷P1074 靶形数独 [搜索]

    题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了 ...

  4. 【洛谷】【博弈搜索】P4363 [九省联考2018]一双木棋chess

    洛谷 P4363 [九省联考2018]一双木棋chess 题目大意 ◇题目传送门◆ 分析 根据题目所给定的规则,可以发现对于每一行,其下面一行上放的棋子数目不可能多于上面的一行. 所以我们可以将每行上 ...

  5. 洛谷题单1-7 搜索题解

    P1219 [USACO1.5]八皇后 Checker Challenge 这个是我最最开始的写法,也是篇幅最大的写法,每放一个棋子就考虑放这个棋子满不满足 每行每列,左斜线和右斜线都只有一个棋子,注 ...

  6. 【洛谷P1255 数楼梯】

    P1255 数楼梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 看上去是个斐波那契数列,其实是高精度计算啦 虽说是个水题,但可以练习一下高精度计算,之前我都是顺序输入,通过指针偏 ...

  7. 洛谷 P1028 数的计算

    递推计算即可 f[1]=1 f[2]=2=f[1]+1 f[3]=2=f[1]+1 f[4]=4=f[1]+f[2]+1 f[5]=4=f[1]+f[2]+1 我的代码(算法借鉴洛谷题解) #incl ...

  8. 洛谷 P2698 [USACO12MAR]花盆Flowerpot 单调队列

    https://www.luogu.org/problemnew/show/P2698 题意中文的不说了: 做法:就是一个滑动区间维护最大值和最小值,首先,了解一条性质,对于满足要求的两个区间 (l1 ...

  9. 洛谷 - P1025 数的划分(dfs)

    题目链接:点击查看 题目大意:给出两个数n和k,要求将n分成k份,问有多少种方案数,注意: 1 1 5和1 5 1还有5 1 1算同一种方案 题目分析:因为n只给到了200,并且k最大为6,所以直接d ...

最新文章

  1. 计算机二级能学到知识吗,2017年关于计算机二级msoffice学习知识点
  2. android中shape的属性,android中shape的属性
  3. Java 10:“ var”关键字
  4. opencv 二值化_Python-OpenCV获取图像轮廓的图像处理方法
  5. 关于fi dd ler 手机抓包 网卡地址地址_136w、136nw、138pnw 通过手机设置无线连接
  6. 我找到一个价值5.5万美元的 Facebook OAuth账户劫持漏洞
  7. python table删除一列_在python中从dataframe中删除多个列
  8. 一个数根号3怎样用计算机计算,手机计算器怎样打出根号3
  9. UMTS移动通信技术
  10. HFSS求解类型和求解设置
  11. MQTT 基础--遗嘱信息(Last will)和遗嘱标示(Testament):第 9 部分
  12. Android平台第三方插件开发指导(dcloud)
  13. 【我的世界原理分析】1.光照原理
  14. java中如果int类型超出了它的范围
  15. JAVA语言编程练习--图形界面--简易登录界面
  16. GLIBC升级的问题(升级GLIBC之前必看)
  17. 老牛知点所以然-Linux(Ubuntu)配置安卓开发环境及过程中常见问题解决
  18. 再见笨重的ELK,轻量化日志 Loki 牛逼,奉上全攻略教程!
  19. 在智能时代我们能做什么---读《智能时代》有感
  20. 涡线图用tecplot咋画

热门文章

  1. pymongo insert_many 批量插入
  2. Git 笔记 上传文件至github
  3. 文巾解题 184. 部门工资最高的员工
  4. 第二篇:阿里数据中台之OneData体系1
  5. Eclipse上搭建SSH(struts-2.2.3 + spring-2.5.6 + hibernate-3.6.8)框架-附源码
  6. jmeter时间函数格林尼治时间_Jmeter时间函数工具(参考)
  7. qt listwidget 关键字颜色_关键字排名优化工具方案
  8. Python入门100题 | 第069题
  9. matplotlib-pie-绘制饼状图
  10. Python编程基础:第三十四节 文件移动Move a File