华为机试-称砝码

描述

现有n种砝码,重量互不相等,分别为 m1,m2,m3…mn ;
每种砝码对应的数量为 x1,x2,x3…xn 。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。

注:

称重重量包括 0

数据范围:每组输入数据满足 1 \le n \le 10 \1≤n≤10 , 1 \le m_i \le 2000 \1≤m
i

≤2000 , 1 \le x_i \le 10 \1≤x
i

≤10

输入描述

对于每组测试数据:
第一行:n — 砝码的种数(范围[1,10])
第二行:m1 m2 m3 … mn — 每种砝码的重量(范围[1,2000])
第三行:x1 x2 x3 … xn — 每种砝码对应的数量(范围[1,10])

输出描述

利用给定的砝码可以称出的不同的重量数

代码解析

n = int(input())
m = input().split()
x = input().split()
# 排列组合
# 所有砝码的重量列表,组合重量
fam = []
for i in range(n):
    fam.extend([int(m[i])] * int(x[i]))
res = {
    
    0}  # 结果集
res_1 = {
    
    }  # 中间结果集
# 使用集合取并集的方法比较方便,每加一块,相当于对已经有的重量都加一遍,然后去重
for i in fam:
    # 每增加一块砝码,所有组合都加一遍
    res_1 = {
    
    i + j for j in res}
    # 取并集去重
    res = res.union(res_1)
print(len(res))

猜你喜欢

转载自blog.csdn.net/summerriver1/article/details/128224871