题解 | 称砝码

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)])))

全部评论

相关推荐

Hyh_111:像这种hr就不用管了,基本没啥实力,换一个吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务