题解 | #称砝码#DFS做法

称砝码

https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

mport copy  # 会报运行超时,仅练习DFS用

def dfs(index):
    if index == len(fama):
        temp2 = copy.deepcopy(temp)
        res.append(temp2)
        return
    for i in range(2):
        if visit[index]:
            visit[index] = False
            if i == 0:
                temp[index] = fama[0]
            else:
                temp[index] = fama[index]
            dfs(index + 1)
            visit[index] = True


while True:
    try:
        class_num = int(input().strip())
        m = list(map(int, input().strip().split(' ')))
        x = list(map(int, input().strip().split(' ')))

        fama = [0]
        for i in range(class_num):
            for j in range(x[i]):
                fama.append(m[i])
        # print(fama)

        visit = [True] * len(fama)
        temp = [''] * len(fama)
        res = []
        dfs(0)
        summary = []
        for i in res:
            summary.append(sum(i))
        summary = set(summary)
        print(len(summary))
    except:
        break
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务