这道题只要枚举出所有情况就可以了。
从最左边一位开始分别讨论为0和为1 两种情况,向右递归。
我的解题代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <string>
using namespace std;
int s[16];
int T,N,H;
void f(int curn, int curh)
{
if(curn==N && curh==H)
{
for(int i=0; i<N; i++) cout << s[i]; cout << endl;
return ;
}
if((N-curn) > (H-curh))
{
s[curn]=0;
f(curn+1,curh);
}
if(curh < H)
{
s[curn]=1;
f(curn+1,curh+1);
}
}
int main()
{
cin >> T;
while(T--)
{
cin >> N >> H;
memset(s,0,sizeof(s));
f(0,0);
if(T) cout << endl;
}
return 0;
}