题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
n = int(input()) m = list(map(int,input().split())) x = list(map(int,input().split())) weight = {0} for i in range(n): for j in range(x[i]): temp_weight = {w + m[i] for w in weight} weight = weight | temp_weight print(len(weight))
这个问题的关键在于每次添加一次砝码都需要更新整个weight。这里利用更新前后的并集生成最后的集合。例如增加一个重量为1的砝码是{0}和{1}的并集,更新后为{0,1}。再次增加一个重量为1的砝码则是{0,1}和{1,2}的并集,即{0,1,2},如此更新。