题目描述
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;
每种砝码对应的数量为x1,x2,x3…xn。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。
注:
称重重量包括0
输入描述:
输入包含多组测试数据。
对于每组测试数据:
第一行:n — 砝码数(范围[1,10])
第二行:m1 m2 m3 … mn — 每个砝码的重量(范围[1,2000])
第三行:x1 x2 x3 … xn — 每个砝码的数量(范围[1,6])
输出描述:
利用给定的砝码可以称出的不同的重量数
示例1
输入
2
1 2
2 1
输出
5
更新
看到这个问题,如果没有思路,那纠结的点可能是,那么多种组合,可能某种组合A和某种组合B,结果重量和是一样的,我们要怎样组合,怎样统计,才能算出有多少不同的重量和?
简化并转化问题,变为:如果已知一部分结果,接下来如何处理新的变化?即如果我知道了已有的重量组合的值(假设为{n1,n2,n3})了, 再来一个重量weight的砝码,能获得多少重量组合?
答案很简单,依次对原始的重量进行n1+weight,n2+weight, n3+weight。 看一下这些重量在不在{n1,n2,n3}这个集合里,没在就加进去。
那如果重量为weight的砝码有number个呢?那我就依次对原始的加一个weight, 更新重量set,加2个weight, 更新重量集合。直到增加number个。
上面描述了处理一种重量的砝码的过程, 解题时我们拓展为处理多种砝码的过程。若有kind种砝码,重复kind次上面的过程即可。
代码及注释(python3)
def func():
try:
kind = int(input()) # 砝码的种类
weights = [int(x) for x in