题目 https://www.luogu.org/problemnew/show/P1036

思路

搜索,使用递归实现dfs,所有数字遍历一遍,当取遍所有数组的index(扫了一遍,并非一定是选取了),判断是否取了要求个数的输入和是否是素数

AC代码

#include<cstdio>
#include<cmath>
using namespace std;
int in[22];
int ans=0;
int n, k;
bool isprim(int num) {
for (int i = 2; i <= sqrt(num); i++)
if (num % i == 0)
return false;
return true;
}
//传递当前选择的数的下标,传递已选择数的个数,以选择的数的总和
void dfs(int cur, int cnt, int num) {
if (cur == n-1) {
if (cnt==k&&isprim(num)) {
ans++;
}
return;
}
dfs(cur+1,cnt,num);//不拿
dfs(cur+1,cnt+1,num+in[cur+1]);//拿
} int main() {
// freopen("E:\\下载\\testdata (1).in","r",stdin);
scanf("%d%d", &n, &k);
for (int i = 0; i <= n-1; i++)
scanf("%d", &in[i]);
dfs(-1, 0, 0);
printf("%d", ans);
return 0;
}

稍微优化

#include<cstdio>
#include<cmath> using namespace std;
int in[22];
int ans=0;
int n, k; bool isprim(int num) {
for (int i = 2; i <= sqrt(num); i++)
if (num % i == 0)
return false;
return true;
}
//传递当前选择的数的下标,传递已选择数的个数,以选择的数的总和
void dfs(int cur, int cnt, int num) {
if (cur == n) {
if (cnt==k&&isprim(num)) {
ans++;
}
return;
}
//第一个结点从这开始
if((k-cnt)>(n-cur))//剩下的不足以满足cnt=k时
return;
dfs(cur+1,cnt,num);//不拿
dfs(cur+1,cnt+1,num+in[cur+1]);//拿
}
int main() {
// freopen("E:\\下载\\testdata (1).in","r",stdin);
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++)
scanf("%d", &in[i]);
dfs(0, 0, 0);
printf("%d", ans);
return 0;
}

我的收获

dfs()参数可以为index,数量,聚合函数这个样子

P1036 选数(DFS)的更多相关文章

  1. 洛谷P1036.选数(DFS)

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

  2. luogu P1036 选数 x

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

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

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

  4. 【搜索】【入门】洛谷P1036 选数

    题目描述 已知 n个整数x1​,x2​,…,xn​,以及1个整数k(k<n).从nn个整数中任选kk个整数相加,可分别得到一系列的和. 例如当n=4,k=3,4个整数分别为3,7,12,19时, ...

  5. (递归)P1036 选数

    #include<stdio.h>#include<math.h>int x[20],n,k,i; //判断是否质数 int isprime(int n){    for(i= ...

  6. 洛谷 P1036 选数【背包型DFS/选or不选】

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

  7. 洛谷P1036 选数 题解 简单搜索/简单状态压缩枚举

    题目链接:https://www.luogu.com.cn/problem/P1036 题目描述 已知 \(n\) 个整数 \(x_1,x_2,-,x_n\) ,以及 \(1\) 个整数 \(k(k& ...

  8. 洛谷 P1036 选数

    嗯.... 这种类型的题在新手村出现还是比较正常的, 但是不知道为什么它的分类竟然是过程函数与递归!!!(难道这不是一个深搜题吗??? 好吧这就是一道深搜题,所以千万别被误导... 先看一下题目: 题 ...

  9. (水题)洛谷 - P1036 - 选数

    https://www.luogu.org/problemnew/show/P1036 $n$ 才20的数据量,我当时居然还在想怎么分组组合,直接 $2^{20}$ 暴力搞就行了. $x_i $太大了 ...

随机推荐

  1. gcc优化选项解析

    1 -fno-defer-pop 函数返回的时候,就立即将栈里面放置的该函数的参数pop出来.这样可以避免函数参数占用过多的栈空间. 2 -fforward-propagate ? 3 -ffp-co ...

  2. 修改spring boot 启动logo

    修改spring boot 启动logo 在项目添加文件banner.txt,将需要的logo写在里面 效果:

  3. sql加一个%号是什么意思

    sql%notfound 是异常SQL%ROWCOUNT SQL语句执行影响的行数SQL%FOUND SQL语句是否成功执行SQL%NOTFOUND SQL语句是否成功执行SQL%ISOPEN 游标是 ...

  4. JfreeChart的使用1

    JfreeChart的使用 来自: 克洛泽大地(DREG) 2008-07-03 14:35:11 先从网上找点介绍. 一.简介 WW 的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提 ...

  5. jsp中一行多条数据情况

    1.实现效果:点击新增会在之前文本框后一直新增文本框并且保留新增的图片 效果图: 2.jsp代码: <table class="Business_Table"> < ...

  6. 基于PHP自带的mail函数实现发送邮件以及带有附件的邮件功能

    PHPmail函数简介 bool mail ( string $to , string $subject , string $message [, string $additional_headers ...

  7. recast 生成navmesh主要流程

    参考:      critterai  http://www.critterai.org      recast & Detour https://github.com/recastnavig ...

  8. bzoj 3401: [Usaco2009 Mar]Look Up 仰望【单调栈】

    用单调递减的栈从后往前扫一遍即可 #include<iostream> #include<cstdio> using namespace std; const int N=10 ...

  9. bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑【矩阵乘法+Floyd】

    唔不知道怎么说--大概核心是把矩阵快速幂的乘法部分变成了Floyd一样的东西,非常之神 首先把点离散一下,最多有200个,然后建立邻接矩阵,a[u][v]为(u,v)之间的距离,没路就是inf 然后注 ...

  10. WPF 添加 gif 图片

    1. 如何在wpf窗体中添加gif动态图片: https://stackoverflow.com/questions/210922/how-do-i-get-an-animated-gif-to-wo ...