0%

Acwing93题:递归实现组合型枚举

DFS对于每个数选或不选进行递归即可

再用二进制记录一下选择过的数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;

int n,m;

void dfs(int d,int s,int state){
if(d==n){
if(s==m){
for(int i=0;i<n;i++)
if((state>>i)&1)
printf("%d ",i+1);
puts("");
}
return;
}
if(s<m) dfs(d+1,s+1,state|(1<<d));
dfs(d+1,s,state);
}

int main(){
scanf("%d%d",&n,&m);
dfs(0,0,0);
return 0;
}