首页 > 试题广场 >

[NOIP2002]选数

[编程题][NOIP2002]选数
  • 热度指数:1042 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
已知 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 3
3 7 12 19

输出

1
头像 Guoxu_
发表于 2024-02-21 17:33:01
思路 先用线性筛得到所有可能用到的素质,再用DFS判断不同组合之和是否为素数。 代码实现 #include <bits/stdc++.h> using namespace std; using ll = long long; const int s = 5 * (int)1e6; v 展开全文
头像 青笙
发表于 2022-01-18 18:50:49
解决此题的关键在于如何使用“排列组合”。我们要从N中取M个数,后进行相加,其次再判断是否为素数。我们先用n接收所有的数的个数,用k来接收需要选取的个数。其实我们构造函数dp(),并传入三个参数,依次为num,sum,i,当num==k时,证明完成了一组(三个数之和),接下里我们来判断是否为素数,这里 展开全文
头像 1305202254
发表于 2023-05-03 19:19:59
肯定得写思路(大雾 include<bits/stdc++.h> using namespace std; int n,k; int a[30],book[21];//a数组保存,book标记 int c[21],s; bool ss(int x)//素数函数 { if(x<2) 展开全文
头像 1305202254
发表于 2023-05-03 19:22:17
全排列+素数判定 直接枚举 #include<bits/stdc++.h> using namespace std; int n,k; int a[30],book[21];//a数组保存,book标记 int c[21],s; bool 展开全文
头像 NCHU19201329
发表于 2021-04-04 19:48:52
已知 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+ 展开全文
头像 savage
发表于 2019-08-20 16:17:50
题目描述 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=2 展开全文

问题信息

难度:
1条回答 2247浏览

热门推荐

通过挑战的用户