• 思路:每次加一块砝码,得到所有组合,使用set去重。这是一种思路,我看很大一部分同学都是使用n种不同砝码进行组合,那样的话时间复杂度稍微低一点,实际看个人觉得哪种方式更好理解。
while True:
    try:
        n = int(input())
        m = input().split(" ")
        x = input().split(" ")
        # mx为所有砝码,比如示例mx为[1, 1, 2]
        mx, l = [], {0}
        for i in range(n):
            mx.extend([int(m[i])] * int(x[i]))
        for i in mx:
            # 每次加一块砝码,使用union(并集)得到新去重的组合,如果不使用union则稍微麻烦一点,需要考虑循环中改变set
            l = l.union({i+j for j in l})
        print(len(l))
    except:
        break