看代码注释。

1、先用列表存储所有砝码,称重种类集合初始种类只有0一种。

2、遍历砝码列表,每个元素与称重种类集合中的元素相加,构成一个新的集合。

3、新集合加入称重种类集合(自动去重),或利用集合运算,与称重种类集合求并集。

n = int(input())#砝码种类
q = list(map(int, input().split()))
c = list(map(int, input().split()))
qc, s = [], {0}#存储所有砝码、称重种类(称重0为一种类型)
for i in range(n):#把所有砝码放入列表中
    qc += [q[i]] * c[i]
for i in qc:#每个砝码都与当前集合中的称重种类相加,然后与称重种类集合求并集或加入称重种类集合
    s = s.union({i + j for j in s})
print(len(s))