洛谷P1036-选数(DFS)

简介: 洛谷P1036-选数(DFS)

题目描述:


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


3+7+12=223+7+12=223+7+12=22


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


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


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


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


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


输入:


键盘输入,格式为:


n,kn,kn,k(1≤n≤20,k<n1 \le n \le 20,k<n1≤n≤20,k<n)


x1,x2,…,xn(1≤xi≤5000000)x_1,x_2,…,x_n (1 \le x_i \le 5000000)x1,x2,…,xn(1≤xi≤5000000)


输出:


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


样例输入:


4 3

3 7 12 19


样例输出:


1


程序代码:



#include<bits/stdc++.h>
using namespace std;
int n,k,a[50],ans; 
bool prime(int x)
{
  for(int i=2;i<=sqrt(x);i++)
  {
    if(x%i==0)
      return false;
  }
  return true;
}
void dfs(int m,int sum,int find)
{//m代表选了几个数,sum代表当前的和,find以免算重 
  if(m==k)
  {
    if(prime(sum))//如果和是素数 
      ans++;
    return ;
  }
  for(int i=find;i<n;i++)
    dfs(m+1,sum+a[i],i+1);//步数m加1,和也要累加,起始值i+1以免算重 
  return ;
}
int main()
{
  scanf("%d %d",&n,&k);
  for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
  dfs(0,0,0);
  printf("%d\n",ans);
  return 0;
}


相关文章
|
2月前
|
存储 人工智能 BI
【每日一题Day216】LC1377 T 秒后青蛙的位置 | BFS DFS
【每日一题Day216】LC1377 T 秒后青蛙的位置 | BFS DFS
32 0
|
12月前
|
机器学习/深度学习
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(3)
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(3)
74 0
|
12月前
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)
45 0
|
12月前
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(1)
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(1)
52 0
|
12月前
|
机器学习/深度学习 算法
【AcWing刷题】蓝桥杯专题突破-深度优先搜索-dfs(8)
【AcWing刷题】蓝桥杯专题突破-深度优先搜索-dfs(8)
73 0
|
算法
从三道leetcode掌握深度优先搜索(DFS)
前言 无论在算法面试还是刷题中,深度优先搜索(DFS)和广度优先搜索(BFS)都是一个绕不过去的坎。不同于数组的从左至右遍历,循环常用于一维数据结构的遍历。而DFS和BFS则常用于多维数据结构的遍历,最常见的莫过于嵌套结构的多叉树了。
|
机器学习/深度学习 算法
算法每日一题:P2089 烤鸡 -DFS练习
算法每日一题:P2089 烤鸡 -DFS练习
八皇后(dfs全排列)
八皇后(dfs全排列)
62 0
|
定位技术 ice
POJ-3009,Curling 2.0(DFS)
POJ-3009,Curling 2.0(DFS)