博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1036 选数【背包型DFS/选or不选】
阅读量:6693 次
发布时间:2019-06-25

本文共 1115 字,大约阅读时间需要 3 分钟。

题目描述

已知 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)。

输入输出格式

输入格式:

 

键盘输入,格式为:

n , k (1<=n<=20,k<n)

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

 

输出格式:

 

屏幕输出,格式为:

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

 

输入输出样例

输入样例#1: 
4 33 7 12 19
输出样例#1: 
1 【代码】:
#include
#include
using namespace std;const int maxn = 22;int a[maxn];int ans,n,k;bool isprime(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(cnt==k) { if(isprime(num)) { ans++; } return ; } for(int i=cur;i<=n;i++) { dfs(i+1,cnt+1,num+a[i]); }}int main(){ //freopen("choose.in","r",stdin); //freopen("choose.out","w",stdout); scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); dfs(1,0,0); printf("%d\n",ans); return 0;}
View Code

 

转载于:https://www.cnblogs.com/Roni-i/p/7966887.html

你可能感兴趣的文章
dd for windows
查看>>
Skype for Business Server 2015-12-WAP-发布-2-邮件服务器
查看>>
IOS 粒子发射器,雪花落下、创建火焰、河流、蒸汽的动画效果源代码
查看>>
Windows 2008从入门到精通系列教程(一)
查看>>
sql server系统表详细说明
查看>>
跨路由网络中配置和使用DHCP
查看>>
VDI序曲十一 微软桌面虚拟化之授权服务器
查看>>
重发老文:DOS游戏编程二十一条
查看>>
MySQL5.6 crash-safe replication一个坑
查看>>
提高精简框架集程序的性能
查看>>
如何取消系统关机
查看>>
如何不让右下角出现“windows安全报警”
查看>>
第一次服务器被入侵
查看>>
[Web 开发] 获取页面元素的坐标及大小
查看>>
【转】教你用C#读写、删除、更新excel表格记录
查看>>
c++11 pod类型(了解)
查看>>
阿里云NAS NFS服务的文件访问控制
查看>>
二叉树学习笔记之二叉查找树(BSTree)
查看>>
Python中使用Flask、MongoDB搭建简易图片服务器
查看>>
ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK (补丁程序集)
查看>>