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

P1036 [NOIP2002 普及组] 选数

时间:2024-05-18 13:18:31浏览次数:24  
标签:le NOIP2002 int 选数 P1036 整数 19 12 include

传送锚点:https://www.luogu.com.cn/problem/P1036

题目描述

已知 \(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 普及组第二题

思路

code

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int n, k;
const int maxn = 30;
int nums[maxn];//存储输入数据
int ct[maxn];//记录k个数分别是多少
int res = 0;//存储方案数
bool is_prime(int x) {
	if (x < 2) return false;
	for (int i = 2; i <= x / i; i ++) {
		if (x % i == 0) return false;
	}
	return true;
}
void dfs(int x,int start) {//遍历的坐标
	if (x > k) {
		int sum = 0;
		for (int i = 1; i <= k; i++) {
			sum += ct[i];
		}
		if (is_prime(sum)) res++;
		return;
	}
	for (int i = start; i <= n; i++) {
		ct[x] = nums[i];
		dfs(x + 1, i + 1);
		ct[x] = 0;
	}
}
int main()
{
	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		cin >> nums[i];
	}
	dfs(1, 1);
	cout << res;
	return 0;
}

标签:le,NOIP2002,int,选数,P1036,整数,19,12,include
From: https://www.cnblogs.com/6Luffy6/p/18199255

相关文章

  • 洛谷 P1031 [NOIP2002 提高组] 均分纸牌 题解
    题目简述有$N$堆纸牌,编号分别为$1,2,\ldots,N$。每堆上有若干张,但纸牌总数必为$N$的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为$1$堆上取的纸牌,只能移到编号为$2$的堆上;在编号为$N$的堆上取的纸牌,只能移到编号为$N-1$的堆上;其他堆上取的纸牌,可......
  • 题解:P10365 [PA2024] Kraniki(评分:8.4)
    前言我们一场模拟赛的题,结果原题是新鲜出炉的。小弟不才,感觉这题是做过的题中几乎最复杂的了。既然搞懂了,就来写一发题解吧。(题外话:目前最优解,我的常数真是小小又大大啊)"Upanddown,glowin'round..."Solution1、一个经典的Trick直接模拟每一种情况显然不可取,考虑计算每......
  • pandas 读取csv 数据,筛选数据
    前言Pandas是一个开源的数据分析和数据处理库,它是基于Python编程语言的。Pandas提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。Pandas主要引入了两种新的数据结构:DataFrame和Series。环境准备先pip安装pandas:pi......
  • 动态规划和层次遍历 —— [NOIP2002 普及组] 过河卒
    题目如下:[NOIP2002普及组]过河卒题目描述棋盘上AAA点有一个过河卒,需要走到目标BB......
  • P1002 [NOIP2002 普及组] 过河卒
    题意:卒子过河,有个马,问安全到达终点的路径有多少条。起点在0,0。每一步可以往右或者往下。思路:处理出马的看守点,然后暴力。。看了一下暴力会TLE。400^2.直接dp转移即可。总结:不知道这个还要开longlong,哎。!voidsolve(){pair<int,int>destination;vector<pair<int......
  • P1002 [NOIP2002 普及组] 过河卒
    题目链接:从起点走到终点,最后一步一定是向右或向下走过来的,因此就可以列出状态转移方程。值得注意的是,对于横着和竖着的两条边界不可直接想当然地认为路径数一定等于\(1\),因为在中途可能会有控制点的存在,因此还是要老老实实地列出状态转移方程。由于边界时只会从一个方向递推过来......
  • P1002 [NOIP2002 普及组] 过河卒
    emmmm...据说是比较简单的dp?(再一次意识到自己的菜)链接:https://www.luogu.com.cn/problem/P1002题目:总的思路就是一个状态转移方程吧:dp[x][y]=dp[x-1][y]+dp[x][y-1];然后如果发现这个点不能通过,那么强制修改dp[x][y]=0;代码:#include<iostream>#include<vector>#inc......
  • 【洛谷P1036】 [NOIP2002 普及组] 选数
    一、题目:二、解题思路:本文章采用的解决方法是递归与DFS(深度优先搜索)。以下图是思路图:1.首先-确定位置题目说4个数字取三个数,所以考虑的只有三个位置和这三个位置分别放什么数值。从第一个位置开始放数。2.其次-开始放数分为4种可能,第一位置可以先放3,那么第二个位置......
  • 蓝桥杯 2022 省A 选数异或
    一种比较无脑暴力点的方法,时间复杂度是(n²+m)。(注意==的优先级比^高,记得加括号(a[i]^a[j])==x)#include<iostream>#include<vector>#include<bits/stdc++.h>//包含一些C++标准库中未包含的特定实现的函数的头文件usingnamespacestd;intmain(){intn,......
  • P1037 [NOIP2002 普及组] 产生数 python 题解
    原题链接:产生数原理解释本题就是基本的dfs,对每一个数遍历深搜,得到他能变化的所有情况,最后相乘就是结果,网上都是c的解法,需要用到高精度,但是python可以处理大数,不需要。vis[]判断该数是否变换过,防止重复以n=123,k=2,变换列表x=[1,3],y=[3,4],即1->3,3->4:先遍历1:遍历......