描述
现有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≤mi≤2000 , 1 \le x_i \le 10 \1≤xi≤10
输入描述:
对于每组测试数据:
第一行:n --- 砝码的种数(范围[1,10])
第二行:m1 m2 m3 ... mn --- 每种砝码的重量(范围[1,2000])
第三行:x1 x2 x3 .... xn --- 每种砝码对应的数量(范围[1,10])
输出描述:
利用给定的砝码可以称出的不同的重量数
示例1
输入:
2 1 2 2 1
复制输出:
5
复制说明:
可以表示出0,1,2,3,4五种重量。
思考:确实没想出来怎么做,看到很多思路,太多没法理解啦,看到一个简单但是很好的思路。
1.根据拿到的不同类型的数量,不同的重量,不同的砝码的数量。
拿到的有
num = input().split()
weight = list(map(int, input().split()))
count = list(map(int, input().split()))
得到三种有效信息,可以将砝码物化,将所有的砝码放到一个列表当中,放入的代表是砝码的重量。
for i in range(num):
for _ in range(count[i]): # 不同砝码的不同数量,比如有三种不同的砝码,但是每种砝码数量不同
lst.append(count[i])
比如,题目给的是两种不同砝码,对应不同数量是2,1,对应不同重量是3,4,所以lst里面就是
lst = [3,3,4]
找到相对应的信息,关键的地方来啦。
将fm中的砝码不断向一个列表中添加,然后加上去重。
for i in fm:
for j in res:
res.append(j+i)
这里会导致失败,内存不足,因为增加的时候会有不断的重复值添加,需要去重。用一个tmp增加去重很厉害。
for i in fm:
tmp = set(res)
for j in tmp:
res.append(j+i)
最后求res列表长度就好。