(枚举专题)组合数枚举

枚举方式就是DFS,设置剪枝条件检查,不满足则return回溯,后面进行递归,不同的在于枚举不仅仅得到一个答案就回溯了,而是得到所有答案,因此再进行一次calc函数递归,第一个剪枝条件是为了得到m个数后输出,第二个剪枝条件是在到达最后几个数后防止剩余数不够及时return回去结束程序

c++代码:

复制代码
#include<bits/stdc++.h>
using namespace std;

//从n中取m个数,有多少种组合 
int n;
int m;

vector<int>  chosen;



void calc(int x)
{
	//剪枝 
	if(chosen.size()>m||chosen.size()+(n-x+1)<m)
	return;
	//check检查是否满足条件
	if(x-1==n)
	{
		for(int i=0;i<chosen.size();i++)
		{
			cout<<chosen[i];
		}
		puts(" ");
		return; 
	 } 
	 chosen.push_back(x);
	 calc(x+1);
	 chosen.pop_back();
	 calc(x+1);
 } 



int main()
{
	cin>>n>>m;
	calc(1);
	return 0;
 } 
相关推荐
东华万里1 分钟前
Release 版本禁用 assert:NDEBUG 的底层逻辑与效率优化
java·jvm·算法
有点。2 分钟前
C++ ⼀级 2023 年09 ⽉
c++
LXS_3572 分钟前
Day 16 C++提高之模板
开发语言·c++·笔记·学习方法
wyw00006 分钟前
鸿蒙开发-如何将C++侧接收的PixelMap转换成cv::mat格式
c++·华为·harmonyos
liulilittle8 分钟前
C++ CRTP 替代虚函数
数据结构·c++·算法
电摇小人13 分钟前
莫比乌斯反演详细解说来啦!!!
数据结构·算法
7澄119 分钟前
数据结构进阶:从链表到红黑树(二叉树、平衡树、红黑树核心解析)
数据结构·链表·二叉树·红黑树·平衡二叉树·旋转·二叉排序树
buyue__25 分钟前
C++实现数据结构——队列
数据结构·c++
Hui Baby27 分钟前
LSM 原理、实现及与 B+ 树的核心区别
java·linux·算法
NZT-4827 分钟前
C++基础笔记(二)队列deque,queue和堆priority_queue
java·c++·笔记