题目链接:https://www.luogu.com.cn/problem/P1036

考点:素数、dfs、组合


题意:给n个整数,从中选取k个求和,统计“和为素数”的次数。

做法一(直接dfs):
dfs,3个参数分别记录了数组下标起点、当前已选数的和、当前已选数量。

#include <bits/stdc++.h>
using namespace std;int A[25];
int cnt = 0;
int n,k;
bool isprime(int x) {if (x == 0 || x == 1) return true;for (int i = 2; i <= sqrt(x); i++) {if (x % i == 0) return false;}return true;
}void dfs(int sta, int sum, int total) {if (total == k) {//cout << sum << endl; // debugif (isprime(sum)) cnt++;return;}    for (int i = sta; i < n; i++) {dfs(i + 1, sum + A[i], total + 1); // 从起点的下一个数开始取数,已选数+1}
}int main() {cin >> n >> k;for (int i = 0; i < n; i++) cin >> A[i];dfs(0, 0, 0);cout << cnt;return 0;
}

一开始没想到可以用dfs,只是想着能遍历出所有组合情况就好了。

解法二(遍历组合):
不就是求每种组合的和吗,遍历就完事儿了。

遍历组合的算法:https://blog.csdn.net/Kwansy/article/details/103538652

#include <bits/stdc++.h>
using namespace std;
const int Max = 20;
int A[Max];
int cnt = 0;bool isprime(int x) {if (x == 0 || x == 1) return true;for (int i = 2; i <= sqrt(x); i++) {if (x % i == 0) return false;}return true;
}void dfs(int sta, int n, int k, int cur) {static int R[Max];if (cur == k) {int sum = 0;for (int i = 0; i < k; i++) {//cout << R[i] << " ";sum += R[i];}if (isprime(sum)) cnt++;return;}for (int i = sta; i < n; i++) { // 遍历起点R[cur] = A[i];dfs(i+1, n, k, cur+1);}
}int main() {int n,k; cin >> n >> k;for (int i = 0; i < n; i++) cin >> A[i];dfs(0, n, k, 0); // 从第0个开始取,总长n,取k个,当前已取0cout << cnt;return 0;
}

【dfs】P1036 选数相关推荐

  1. 洛谷 P1036 选数

    P1036 选数 题目描述 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别 ...

  2. 洛谷 - P1036 选数(递归)

    题目链接:点击查看 题目大意:给出n个数,我们需要从中选k个作为一个新的集合,问新集合的权值和有多少是素数 题目分析:这个题目考考察了两点: 判断素数 设计递归 为什么把判断素数单独列出来了呢?因为一 ...

  3. 洛谷P1036选数(素数+组合数)

    题目链接:https://www.luogu.org/problemnew/show/P1036 主要考两个知识点:判断一个数是否为素数.从n个数中选出m个数的组合 判断一个数是否为素数: 素数一定是 ...

  4. 洛谷P1036选数题解--zhengjun

    题目描述 已知 nnn 个整数 x1,x2,-,xnx_1,x_2,-,x_nx1​,x2​,-,xn​,以及111 个整数 kkk (k<nk<nk<n).从 nnn 个整数中任选 ...

  5. 信息学奥赛一本通 1919:【02NOIP普及组】选数 | 洛谷 P1036 [NOIP2002 普及组] 选数

    [题目链接] ybt 1919:[02NOIP普及组]选数 洛谷 P1036 [NOIP2002 普及组] 选数 [题目考点] 1.排列组合 2.深搜(子集树) 3.质数 [解题思路] 深搜(子集树) ...

  6. 1693: 选数(DFS)

    1693: 选数 时间限制: 1 Sec 内存限制: 125 MB 题目描述 已知n个整数 x1,x2,-,xn,以及一个整数 k(k<n).从n个整数中任选k个整数相加,可分别得到一系列的和. ...

  7. 【洛谷】选数---深度优先搜索+单调不降去重

    题目描述 传送门:https://www.luogu.com.cn/problem/P1036 已知n个整数x1,x2-xn,以及一个整数k(k<n).从n个数字中任选k个数字相加,可分别得到一 ...

  8. 程序设计——第八周(差分约束:选数问题;拓扑排序:求比赛名次;scc:选班长)

    A.差分选数 题目描述 给定一个数轴上的 n 个区间,要求在数轴上选取最少的点使得第 i 个区间 [ai, bi] 里至少有 ci 个点 使用差分约束系统的解法解决这道题 使用差分约束系统的解法解决这 ...

  9. BZOJ3930: [CQOI2015]选数

    BZOJ3930: [CQOI2015]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案. 小z很好奇这样选出的数的最大公约数的规 ...

最新文章

  1. Windows Phone 7 隔离存储空间“.NET研究”资源管理器
  2. HTML 各种鼠标手势
  3. Count The Repetitions
  4. Ⅰ:zookeeper的单机安装 - 详细教程
  5. Yii获取指定URL路径字符串
  6. Light bulbs(上海icpc网络预选赛,差分离散化)
  7. JEECG再创新举,开辟云应用开发新时代,打造jeecg企业级云应用生态圈
  8. MyBatis框架 动态SQL
  9. 《Reids 设计与实现》第四章 整数集合和压缩列表
  10. 单击选定单元格后输入新内容_2015年计算机一级msoffice考前简答题练习
  11. Java生成UUID方式
  12. 用tinypng压缩图片
  13. [openssl]centos version ‘libcrypto.so.10‘ not found
  14. 测试点击屏幕次数的软件_红蜘蛛5校色仪怎么用?显示器校色及测试色域和色彩精准度详细教程...
  15. S5PV210开发 -- Nand和e-MMC区别以及系统更新
  16. 时间复杂度 O(1),O(n),O(n^2),O(logn),O(nlogn) 详解
  17. 用友公司来访,一些关于用友最新旗舰产品U9的一些介绍(图文)
  18. Win10关闭自动调节亮度问题
  19. 结庐在人境,而无车马喧
  20. 抖音一个好的标题让你轻松上热门,该怎么写好抖音标题。

热门文章

  1. 虚拟机备份oracle异常,客户端连接虚拟机Oracle服务器异常
  2. linux命令格式,常用10个LINUX命令说明
  3. 成功解决ImportError: cannot import name ‘Imputer‘
  4. ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测
  5. 2-29 while
  6. 超哥笔记--linux准备知识(1)
  7. [leetcode] 22. Generate Parentheses(medium)
  8. 从Activity中返回数据
  9. 常用的SSH注解标签
  10. tq2440 jlink连接问题