题目描述
解题思路
砝码能称重的可能性就是这些砝码组合的可能性,为了避免重复和完全找到所有可能性。我们应当从第二个砝码开始遍历时就添加他自己以及他和当前列表(该列表由之前的值加减值开始)的值加减组合,然后进行set就是除掉重复,然后再遍历后面的砝码
代码
n=int(input())
fama=list(map(int,input().strip().split()))
fama.sort()
zuhe=[]
set_zuhe=set()
for i in fama:
if zuhe==[]:
zuhe.append(i)
set_zuhe.add(i)
else:
#在前面的组合上继续构造
for j in zuhe:
set_zuhe.add(i)
set_zuhe.add(i+j)
set_zuhe.add(abs(i-j))
zuhe=list(set_zuhe)
if 0 in zuhe:
zuhe.remove(0)
print(len(zuhe))
这里有一个技巧就是,当我们拿到砝码的列表时,我们sort一下让最小的排在最前面,这样会节约时间。如果你不排序当较大的数出现在前面时,大的数就会在循环里多次被计算,会增加时间,而排序后就是小的数计算次数肯定大于大的数,就可以节约时间