アルゴリズム番号の組み合わせ

ロストバレーセレクション

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
void print_subset(int n) {
    
    //通过二进制求对应所以组合的子集 
	for (int i = 0; i < (1 << n); i++) {
    
    //2^n 
		for (int j = 0; j < n; j++) {
    
    
			if (i & (1 << j))cout << j << " ";//检查i的最低位开始,若为1 输出j 

		}
		cout << endl;
	}
}
void print_set(int n, int k) {
    
    
	for (int i = 0; i < (1 << n); i++) {
    
    
		int num = 0, kk = i;
		while (kk) {
    
    
			kk = kk & (kk - 1);//清除kk中的最后一个1 
			num++;//num统计i中1的个数  
		}
		if (num == k) {
    
    //二进制数中的1有k个 符合条件 
			for (int j = 0; j < n; j++) {
    
    
				if (i & (1 << j))cout << j << " ";
			}
			cout << endl;
		}
	}
}
void fun(int k, int n, int sum) {
    
    //不降原则 递归搜索
	if (k == 0) {
    
    
		cout << sum << " ";
		return;
	}
	for (int i = n - 1; i >= k - 1; i--) 
	fun(k - 1, i - 1, sum + arr[i]);
}
int main() {
    
    
	int n, k;
	/*cin>>n;
		print_subset(n); */
	/*cin >> n >> k;
		print_set(n, k);*/
		
	return 0;

}

おすすめ

転載: blog.csdn.net/Minelois/article/details/113855018