AcWing 93. 递归:对y总代码进行注释
原题链接
简单
算法1
对y总代码进行注释,方便自己复习,与此同时,对其他同学有帮助也是极好的。
#include<bits/stdc++.h>
using namespace std;
int n, m;
/*
u:当前枚举到第几个数
sum:当前共选择了几个数,是否达到m个的要求
state:判断某个数是否选上,状态压缩,用二进制表示而已。
*/
void dfs(int u ,int sum, int state){
if(sum == m){
for(int i = 0; i < n; i++)
if(state >> i & 1)
cout<< i + 1 << " ";
cout << endl;
return;
}
if( u == n) return;
// 选择当前值u, 个数sum++
dfs(u + 1, sum + 1, state | 1 << u);
// 不选择当前值u, 个数sum不变
dfs(u + 1, sum, state);
}
int main(){
cin >> n >> m;
// 当前枚举到第几个数,当前选了多少个数,状态看看这个数选没选
dfs(0, 0, 0);
}
state >> i & 1如果用c表示的话应该怎么来写
这就是c的写法,右移和位运算