称砝码

题目描述

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

 

注:

称重重量包括0

 

方法原型:public static int fama(int n, int[] weight, int[] nums)

 

输入描述:

输入包含多组测试数据。

对于每组测试数据:

第一行:n --- 砝码数(范围[1,10])

第二行:m1 m2 m3 ... mn --- 每个砝码的重量(范围[1,2000])

第三行:x1 x2 x3 .... xn --- 每个砝码的数量(范围[1,6])

输出描述:

 

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

示例1

输入

复制

2
1 2
2 1

输出

复制

5
def fama(n,weight,nums):
    res = set()
    for i in range(nums[0]+1):   #先存第一个砝码各种数量的情况
        res.add(i*weight[0])     #包括0重量情况
    for i in range(1,n):         #砝码不同重量遍历
        tmp = list(res)            #能称出的体重不重复
        for j in range(1,nums[i]+1):       #砝码对应不同个数的遍历
            for wt in tmp:          #遍历已有的重量,加上新的重量
                res.add(wt+j*weight[i])
    return len(res)

n = int(input())
weight = [int(i) for i in input().split()]  #重量
nums = [int(i) for i in input().split()]  #砝码个数
print(fama(n,weight,nums))    #求能称出多少不同重量

 

你可能感兴趣的:(华为笔试训练)