题解 | 称砝码
from functools import reduce
n = int(input())
weight = input().split()
number = input().split()
lst = []
for i in range(n):
# 把每个种类的砝码可能构成的称量列表计算出来,例如5个1g的砝码可以构成列表[0, 1, 2, 3, 4, 5]
lst.append([int(weight[i])*k for k in range(int(number[i])+1)])
def parse(lst1, lst2):
# 每两个这样的列表可以合并成一个更大的列表,例如有1g砝码构成的列表和5g砝码构成的列表,从列表1中选出一个重量+列表2中选出一个重量即可
res = []
for i in lst1:
for j in lst2:
res.append(i + j)
return sorted(set(res))
print(len(reduce(parse, lst)))
简略写法
from functools import reduce n = int(input()) weight = input().split() number = input().split() print(len(reduce(lambda lst1,lst2: sorted(set([i + j for i in lst1 for j in lst2])), [[int(weight[i])*k for k in range(int(number[i])+1)] for i in range(n)])))


上海得物信息集团有限公司公司福利 1164人发布