首页 > 试题广场 >

选择物品

[编程题]选择物品
  • 热度指数:4174 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

个物品可供选择,必须选择其中个物品,请按字典序顺序输出所有选取方案的物品编号

等被认为是同一种方案,输出字典序最小的即可

数据范围:
进阶:时间复杂度,空见复杂度

输入描述:
对于每一组测试数据, 每行输入个数




输出描述:
对于每组输入样例,按字典序输出所有方案选择物品的编号,每种方案占一行
示例1

输入

4 1

输出

1
2
3
4
示例2

输入

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)

发表于 2022-08-03 17:15:54 回复(0)
#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()

编辑于 2021-05-06 10:50:25 回复(1)