传送门:http://acm.jlu.edu.cn/joj/showproblem.php?pid=1466
题目大意:给你一个二进制的长度,和1的个数,写出所有符合这个要求的二进制的串,并排序输出。
一道简单的dfs题,从高位向低位dfs,先枚举0,后枚举1。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n, m, a[20];
void dfs(int x, int step)
{
if (step == m)
{
for (int i = 0; i < n; ++i)
printf("%d", a[i]);
printf("\n");
return;
}
if (x == n) return;
dfs(x + 1, step);
a[x] = 1;
dfs(x + 1, step + 1);
a[x] = 0;
}
int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
memset(a, 0, sizeof(a));
dfs(0, 0);
}
return 0;
}