首页 > 其他分享 >P1036 [NOIP2002 普及组] 选数

P1036 [NOIP2002 普及组] 选数

时间:2024-10-16 16:48:30浏览次数:8  
标签:le NOIP2002 int 选数 P1036 整数 19 12 path

[NOIP2002 普及组] 选数

题目链接

题目描述

已知 \(n\) 个整数 \(x_1,x_2,\cdots,x_n\),以及 \(1\) 个整数 \(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 \le n \le 20\),\(k<n\))。

第二行 \(n\) 个整数,分别为 \(x_1,x_2,\cdots,x_n\)(\(1 \le x_i \le 5\times 10^6\))。

输出格式

输出一个整数,表示种类数。

样例 #1

样例输入 #1

4 3
3 7 12 19

样例输出 #1

1

提示

【题目来源】

NOIP 2002 普及组第二题

#include<vector>
#include<iostream>
using namespace std;
int n, k;
int a[25];
vector<int> path;
int cnt;
int isprime(int n) {
	if (n <= 1) return 0;
	if (n == 2) return 1;
	if (n % 2 == 0) return 0;
	for (int i = 3; i <= n / i; i+=2) {
		if (n % i == 0) return 0;
	}
	return 1;
}
void dfs(int n, int k, int sum, int a[],vector<int> path,int startindex) {
	if (path.size() == k) {
		if (isprime(sum)) cnt++;
		return;
	}
	//记得传入1
	for (int i = startindex; i <= n-(k-path.size())+1; i++) {
		sum += a[i];
		path.push_back(a[i]);
		dfs(n, k, sum, a, path, i + 1);
		sum -= a[i];
		path.pop_back();
	}
}
int main()
{
	cin >> n >> k;
	for (int i = 1; i <= n; i++) cin >> a[i];
    dfs(n, k, 0, a, path, 1);
	cout << cnt;
	return 0;
}

标签:le,NOIP2002,int,选数,P1036,整数,19,12,path
From: https://www.cnblogs.com/xkgc/p/18470294

相关文章

  • kibana筛选数据
    q:kibana如何编写语句,过滤es日志晚上9点到第二个早上8点的数据,并且筛选出用户名,是已经去重的用户名 a:在Kibana中使用Elasticsearch查询语言(如Painless脚本或Kibana的Kuery查询语言)来过滤特定时间段的数据并去重用户名,可以通过以下步骤实现。假设你的索引模式为`m......
  • 广州C++信奥老师解一本通题 1919:【02NOIP普及组】选数
    ​ 【题目描述】已知nn个整数x1,x2,……xn以及一个整数K(K<n)。从n个整数中任选K个整数相加,可分别得到一系列的和。例如当n=4, k=34个整数分别为3,7,12,193,7,12,19时,可得全部的组合与它们的和为:3+7+12=223+7+19=297+12+19=383+12+19=34现在,要求你计......
  • 3456:练82.3 选数
    3456:练82.3选数信息学奥赛一本通-编程启蒙(C++版)在线评测系统练82.3选数1919:【02NOIP普及组】选数信息学奥赛一本通(C++版)在线评测系统【信息学奥赛一本通-编程启蒙】3456练82.3选数【信息学奥赛一本通-编程启蒙】3456练82.3选数_哔哩哔哩_bilibili#include......
  • 洛谷P1032 [NOIP2002 提高组] 字串变换
    ac代码:#include<bits/stdc++.h>usingnamespacestd;constintN=15;structnode{ stringstr; intstep;};stringa,b;stringorginal[N];stringtranslated[N];intn,ans;map<string,int>ma;stringtrans(conststring&str,inti,i......
  • 信息学奥赛一本通1314:【例3.6】过河卒(Noip2002)
    【题目描述】棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1中的C点和P1,……,P8,卒不能通过对方马的控制点。棋盘用坐标表示,A点(0,0)、B点(n,......
  • P1002 [NOIP2002 普及组] 过河卒
    题目描述棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,A 点 (0,0)、B 点 (n,m),同样马的位置坐......
  • R语言基于日期范围筛选数据实战:日期范围之内的数据、日期范围之外的数据、日期之后的
    R语言基于日期范围筛选数据实战:日期范围之内的数据、日期范围之外的数据、日期之后的数据、日期之前的数据目录R语言基于日期范围筛选数据实战(SubsetbyaDateRange)#基于日期范围筛选数据语法#基于日期范围筛选数据(日期范围内的数据)#基于日期范围筛选数据(日期范围外的......
  • Java筛选数据:List的contains和Map的get哪个快?
    在Java中,List的contains方法和Map的get方法在性能上有一些区别,主要取决于数据结构的特性和使用场景:List的contains方法:List是一个有序集合,使用线性查找来确定列表中是否包含某个元素。时间复杂度为O(n),其中n是列表的大小。对于小型的List或者在列表中的......
  • 题解 P1031 [NOIP2002 提高组] 均分纸牌
    link贪心题中描述每一堆牌只能移动若干张牌到相邻的牌堆上确定了局部最优解必定能推导出全局最优解。易知均分完后,每堆牌的数量都为纸牌总数的平均数\(\mathrm{arg}\)。所以我们可以预处理每堆牌跟\(\mathrm{arg}\)的差距for(inti=1;i<=n;++i)sum+=a[i];......
  • P1031 [NOIP2002 提高组] 均分纸牌
    简单贪心题。如果每个数相等时的数为sum,考虑一个数不等于sum,最好的情况通过一次转移使它变为sum。所以按顺序处理,当前数少从后面拿,当前数多向后面扔,中间记录次数即可。考虑正确性,有人会觉得,如果后面的数不够拿成为了负数,需要从更后面拿,就不止一次转移了。其实,如果遇到上述情......