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

P1036 [NOIP2002 普及组] 选数(递归)

时间:2023-11-29 16:15:27浏览次数:36  
标签:12 return 递归 NOIP2002 int 选数 P1036 include

[P1036 [NOIP2002 普及组] 选数]

我的思路是运用递归实现一个树状分支
例如
3 7 12 19
4选3,每个情况为
3-7-12
3-12-19
7-12-19

注意

我们用递归时在传参时要以和的形式传参。
如果先求和再传参就会发生错误.

#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
int a[21];
int num = 0;
bool ac(int x) {
	if (x % 2 == 0 && x != 2) {
		return false;
	}
	for (int i = 2; i < x; i++) {
		if (x % i == 0) {
			return false;
		}
	}
	return true;
}

void ad(int s, int k, int i, int n, int v ) {
	if (i > k) {
		if (ac(s)) {
			num++;
			return ;
		}
		return ;
	}
	for (int x = 1; x <= n - k + i ; x++) {

		if (v >= x) {
			continue;
		}

		
		ad(s + a[x], k, i + 1, n, x);

	}

}

int main() {
	int n, k;
	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	int s = 0;
	ad(s, k, 1, n, 0);
	
	cout << num;
	return 0;
}

标签:12,return,递归,NOIP2002,int,选数,P1036,include
From: https://www.cnblogs.com/sdlypsck/p/17865119.html

相关文章

  • P1002 [NOIP2002 普及组] 过河卒
    [NOIP2002普及组]过河卒题目描述棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点。卒行走的规则:可以向下、或者向右。同时在棋盘上\(C\)点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,\(A\)点\((0......
  • 【洛谷 P1035】[NOIP2002 普及组] 级数求和 题解(循环)
    [NOIP2002普及组]级数求和题目描述已知:。显然对于任意一个整数,当足够大的时候,。现给出一个整数,要求计算出一个最小的,使得。输入格式一个正整数。输出格式一个正整数。样例#1样例输入#11样例输出#12提示【数据范围】对于的数据,。【题目来源】NOIP2002普及组第一题......
  • 【题解】HNOI2012 - 集合选数
    HNOI2012-集合选数https://www.luogu.com.cn/problem/P3226不算难的非显然状压dp。首先根据限制条件建图,\((x,2x),(x,3x)\)连边,表示边上相邻两个点不能同时选,然后一组独立集就是一个可行的集合。发现画出来的图是若干个部分网格图,每个连通块最小的点都是与\(6\)互质的数......
  • layui按钮多选数据赋值到OA明细表
    实际效果:点击全选按钮,选择数据,点击获取选中行数据,自动赋值给明细表 因为利用layui生成按钮以及表格,所以需要引入layui。表格内容为固定数据,如需要实现动态分页数据,自行实现,或者查看我另一篇博客文章:https://www.cnblogs.com/stfzhuang/p/17676056.html实现JS:<script>......
  • P1037 [NOIP2002 普及组] 产生数
    P1037[NOIP2002普及组]产生数解法1:利用floyd寻找每位数字可变化的点点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;strings;intd[20][20];intf[25];intnum[150];intmain(){ cin>>s; intn=s.length(); intq; ci......
  • P1002 [NOIP2002 普及组] 过河卒
    P1002[NOIP2002普及组]过河卒基础DP卒只能向右/向下由此可得转移方程dp[i][j]=dp[i-1][j]+dp[i][j-1]卒不能走马能到的地方和马所在的地方则用一个数组标记马能到的地方和马所在的地方,在经过该点的时候跳过即可注意判断边界问题以及dp数组的初始化#include<bit......
  • 【题解】洛谷 P1002 [NOIP2002 普及组] 过河卒
    原题链接解题思路这是一道经典的动态规划题目。如果尝试使用深度优先搜索(dfs)或广度优先搜索(bfs)做就会获得TLE(注意数据范围)。于是我们想到了更为高级的动态规划(DynamicProgramming,dp)。简略介绍动态规划算法的核心思想:把原问题分解为相对简单的子问题的方式求解复杂问题。......
  • js筛选数组排除多个多个不符合项
    constarr=[{label:'2',value:'2'},{label:'1',value:'1'},{label:'3',value:'3'}]//把value=1和value=2的数据筛掉letnewArr=arr.filter(opt=>......
  • 「NOIP2002」均分纸牌
    ​题目描述有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移动。移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆......
  • element中两个table表格和已选数据联动
    element中table表格和已选数据联动需求:1.根据条件查询表格,多选框选中项移到已选择表格,取消选择,已选项表格也取消该调数据数据2.已选项增加删除按钮,删除之后,查询数据的表格也取消勾选3.重新查询新数据,已选择数据不会改变,新选中的数据添加到已选择表格//......