有个物品可供选择,必须选择其中
个物品,请按字典序顺序输出所有选取方案的物品编号
数据范围:
进阶:时间复杂度
,空见复杂度%5C)
有个物品可供选择,必须选择其中
个物品,请按字典序顺序输出所有选取方案的物品编号
对于每一组测试数据, 每行输入个数
和
。
对于每组输入样例,按字典序输出所有方案选择物品的编号,每种方案占一行
4 1
1 2 3 4
5 2
1 2 1 3 1 4 1 5 2 3 2 4 2 5 3 4 3 5 4 5
track = [] def trackback(i,targetnum): if len(track) == target_num: for i in range(len(track)): print(track[i],end =" ") print() for k in range(i,len(data)): track.append(data[k]) trackback(k+1, targetnum) track.pop() if __name__ == "__main__": num = list(map(int,input().split())) target_num = num[1] data = [] for i in range(num[0]): data.append(i+1) trackback(0,target_num)
#first n, m = map(int, input().split()) vis = [False] * (n + 5) def dfs(x, c): if c == m: for i in range(len(vis)): if vis[i]: print(i, end=' ') print() for j in range(x, n + 1): vis[j] = True dfs(j + 1, c + 1) vis[j] = False dfs(1, 0)
#second n, m = map(int, input().split()) ans = [] def dfs(depth, path, used, index, n, m): if depth == m: ans.append(path) return else: for i in range(index, n + 1): if not used[i]: used[i] = True dfs(depth + 1, path + [i], used, i + 1, n, m) used[i] = False used = [False] * (n + 1) dfs(0, [], used, 1, n, m) for i in ans: for j in i: print(j, end=" ") print()