现有n种砝码,分别为 m1,m2,m3…mn ;
每种砝码对应的数量为 x1,x2,x3...xn 。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。
我太笨了,只会穷举法:把砝码一个个放到 lst=[n1,n1,n1,n2,n2,n2,...],然后按照取1个、取2个。取m*n个,依次求和,把和不重复的放到sumlist中。这样数据量太大会超时
from itertools import combinations
l=int(input())
m=[int(i) for i in input().split()]#记录每个砝码重量
n=[int(i) for i in input().split()]#记录每个砝码数量
lst=[0]
for i in range(l):
for j in range(1,n[i]+1):
lst.append(m[i])
#lst存所有砝码,一个位置放一个砝码,总如砝码1有2个,砝码2有3个,则lst=[m1,m1,m2,m2,m2]
sumlist=[0]
for i in range(1,len(lst)+1):
#分别取一个砝码、二个砝码。。计算和是否相同,不同的放到sumlist中
for j in set(combinations(lst,i)):
if sum(j) not in sumlist:
sumlist.append(sum(j))
print(len(sumlist))