2002年分区联赛普级组之二_选数_ssl1020_dfs
来源:互联网 发布:js触发事件消失 编辑:程序博客网 时间:2024/05/22 11:45
Description
已知 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。
Input
n , k (1<=n<=20,k<n)
x1,x2,…,xn (1<=xi<=5000000)
Output
一个整数(满足条件的种数)。
Sample Input
4 3
3 7 12 19
Sample Output
1
Source
elba
思路:
dfs练手题,因为k不大所以不会TLE,但不知为何比pascal要慢而且慢很多。搜索数字相加判断是否为素数。打的c++然后ac感觉很爽很爽很爽很爽
代码/c++:
#include <stdio.h>#include <cmath>int ans,n,k=0;long long v=0;int a[20],f[20]={0};bool check(int x){ for (int i=2;i<=sqrt(x);i++) if (x%i==0) return false; return true;}void dfs(int dep,int last){ if (dep==k+1) { if (check(v)) ans++; } else { for (int i=last;i<=n;i++) if (!f[i]) { f[i]=1; v+=a[i]; dfs(dep+1,i+1); v-=a[i]; f[i]=0; } }}int main(){ scanf("%d%d",&n,&k); for (int i=1;i<=n;i++) scanf("%d",&a[i]); dfs(1,1); printf("%d",ans); return 0;}
0 0
- 2002年分区联赛普级组之二_选数_ssl1020_dfs
- 2002年分区联赛普级组之二 选数(dfs)
- 1999年分区联赛普级组之二 回文数
- 2002年分区联赛普级组之三 产生数
- 2002年分区联赛普级组之三 产生数
- 2002年分区联赛普级组之三 产生数
- 2001年分区联赛普级组之二 最…
- 1998年分区联赛普级组之二 阶乘
- 2003年分区联赛普级组之二 数字游戏
- 2003年分区联赛普级组之二 数字游戏_dp
- 【SSLGZ 1021】2002年分区联赛普级组之三 产生数
- 2002年分区联赛普级组之四 过河卒
- 2002年分区联赛普级组之四 过河卒
- 2001年分区联赛提高组之二 数…
- 2004年分区联赛提高组之二 合并果子
- 2001年分区联赛普级组之一 数…
- 2005年分区联赛普级组之二 校门外…
- 2006年分区联赛普级组之二 开心的…
- Java学习笔记之深入理解关键字final
- hibernate多种方式查询
- Graphite监控后端组件Carbon详解
- ubuntu下用Gcc编译器编译c语言的静态和动态链接库范例
- 联想昭阳k20-80安装ubuntu WIFI无法使用的解决方案
- 2002年分区联赛普级组之二_选数_ssl1020_dfs
- 70. Climbing Stairs
- C语言四则运算器
- Spring-三种依赖注入方式
- DrawerLayout(官方侧滑菜单)的简单使用(转载)
- 自定义slideMenu
- 数据库范式解析
- Ubuntu中解压和压缩命令
- SharedPreference