题解 | #称砝码#

称砝码

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

    # 输入处理
n = int(input())
m =[int(i) for i in input().split()]
x = [int(i) for i in input().split()]
    # 将所有砝码放到一个列表中
lst = [m[i] for i in range(len(m)) for j in range(x[i])]

    #初始化(这里如果使用列表后面再set会超时报错)
weight = {0,}#单元素集合
    #对每一个weight元素(已称出的重量),都加上新增的砝码重量并添加到weight中
for i in lst:
    for j in list(weight):#对于已经称出的重量每一个,list迭代
        weight.add(j+ i)#尝试加上一个新砝码,注意每一次内层循环只关注循环开始时的weight情况
    #第一次:weight=0,然后因为weight里面无其他了。就让i+1,此时weight在第一次时加上的第一个砝码才起作用,weight=0,1,然后内层让weight加上第二个砝码看看能增加哪些,由于weight是set形式,重复的消了
print(len(weight))

全部评论

相关推荐

头像
10-16 09:58
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务