ren=[]
chosen=[]#里面存的是数字,从1到n表示选的序号,所以要用另外一个列表存选的名字输出
ans=[]
n,m=map(int,input().split())
for _ in range(n):
line=input()
ren.append(line)#输入人名n个
def zuhe(x):#x表示搜索了几层,一共n层
if len(chosen)>m :
return#剪枝,选了m个就要退出,不是搜到x+1层,可能搜完了才有m个
if len(chosen)+n-x+1<m:
return#剪枝,已经选的+没选的(到这里的时候实际上搜索了x-1层,所以n减x-1)<要求选的,这样以后就算全选也不够
if x==n+1:#表示已经搜到了第n+1层返回,这样就是搜完n层
a=' '
for i in chosen:
a=a+ren[i-1]+' '
ans.append(a.lstrip())#lstrip删除左边的空格
return
chosen.append(x)#选第x个
zuhe(x+1)
chosen.pop()#不选第x个
zuhe(x+1)
zuhe(1)
#print(len(ans))得到答案个数
for elem in ans:
print(elem)
一共有n层,每层2个分支(选或者不选)。