[NOIP2002] 选数
来源:互联网 发布:编译一个矩形java 程序 编辑:程序博客网 时间:2024/05/19 03:44
[NOIP2002] 选数
★ 输入文件:choose.in
输出文件:choose.out
简单对比时间限制:1 s 内存限制:128 MB
[问题描述]:
已知 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)
[输出]:
格式为:一个整数(满足条件的种数)。
[输入输出样例]:
输入:choose.in
4 3
3 7 12 19
输出:choose.out
1
简单 深搜。。传递3个参数。一个传递当前选择的数的下标,一个传递已选择数的个数,一个选择以选择的数的总和
#include<cstdio>#include<cmath>using namespace std;const int maxn = 22;int a[maxn];int ans,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(cnt==k){ if(isprim(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;}
- 选数(NOIP2002)
- [NOIP2002] 选数
- noip2002—选数
- 【NOIP2002】选数 枚举
- 选数(NOIP2002)
- [DFS]FJSDFZOJ 1079/NOIP2002 选数
- noip2002 选数(深搜+质数判断)
- 洛谷 P1036 选数 NOIP2002 普及组
- 洛谷P1036 NOIP2002 选数(dfs)
- NOIP2002 产生数
- NOIP2002 产生数
- noip2002普及组-产生数
- noip2002产生数 (高精*单精+深搜)
- CodeVS1009[NOIP2002(普及组)] 产生数【Floyd】
- NOIP2002 自由落体
- 【模拟】【NOIP2002】均分纸牌
- [贪心]NOIP2002 均分纸牌
- 【NOIP2002】矩形覆盖 DFS
- Windows CE的电源管理之三
- 开闭原则
- C++函数声明规定只能为原型形式,真实目的是为了函数重载
- MFC Ribbon风格编辑框的使用和WebBrowser执行JavaScript代码
- ecshop二次开发指南
- [NOIP2002] 选数
- Javascript中最常用的55个经典技巧
- 轩辕兄弟红包!道!我!号!还分我设备!6pk1r
- 2012-10-17 11gR2 concepts page 293 - 326
- citrix 了解
- Apache Rewrite 规则详解
- Error: (vsim-3053) D:/adder/adder_controltb.v(60): Illegal output or inout port connection (port 'P0
- 通过Apache的URL地址重写(附伪静态方式)
- C++为什么不提倡使用scanf和printf函数