• 算法进阶指南(递归)--- 递归实现组合型枚举


    题目链接:递归实现组合型枚举

    动态数组:

    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    
    int n,m;
    vector<int > chosen;
    
    void dfs(int x) {
            //当前选择的个数大于m或者根本就凑不到m个数
    	if(chosen.size() > m || chosen.size()+n-x+1 < m) return ;
    	if(x == n+1) {
    		for(int i=0; i<chosen.size(); i++) {
    			cout<<chosen[i]<<" ";
    		}
    		puts("");
    		return ;
    	}
    	
    	//选择x这个值
    	chosen.push_back(x);
    	dfs(x+1);
    	chosen.pop_back();
    	
    	//不选择x这个值
    	dfs(x+1);
    }
    int main() {
    	cin >> n >> m;
    	dfs(1);
    	return 0;
    }
    

    位运算版:

    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    
    int n,m;
    
    void dfs(int pos,int sum,int tar) {
    	if(sum + n - pos <m) return ;
    	if(sum==m) {
    		for(int i = 0; i < n; i++) {
    			if(tar >> i & 1)
    				cout<<i+1<<" ";
    		}
    		puts(" ");
    		return ;
    	} 
    	dfs(pos+1,sum+1,tar|1<<pos);
    	dfs(pos+1,sum,tar);
    }
    int main() {
    	cin >> n >> m;
    	dfs(0,0,0);
    	return 0;
    }
    
  • 相关阅读:
    神经网络
    机器学习英语
    机器学习常用函数解析
    机器学习(二)
    机器学习(三)
    Python文本数据分析与处理
    数据分析
    sklearn
    「Poetize9」升降梯口
    「Poetize9」礼物运送
  • 原文地址:https://www.cnblogs.com/bingers/p/13192301.html
Copyright © 2020-2023  润新知