考虑将砝码放在一个数组,每次新加一个砝码就循环和前面所有数求和、差的绝对值。
第一版代码:
n=int(input())
w=list(map(int,input().split()))
res=[]
res.append(w[0])
for i in range(1,len(w)):
res.append(w[i])
for j in range(len(res)-1): #这里-1 是为了不把自己算进去
m1=w[i]+res[j]
res.append(m1)
m2=abs(w[i]-res[j])
res.append(m2)
res=list(set(res))
print(len(res))
有问题,总是会少。因为set(res)那里,set之后也会自动排序,所以过早的自动排序之后,后面循环加减的时候就不大对了。因此再加一个新数循环前面所有的之后再set。
n=int(input())
w=list(map(int,input().split()))
res=[]
res.append(w[0])
for i in range(1,len(w)):
res.append(w[i])
for j in range(len(res)-1):
m1=w[i]+res[j]
res.append(m1)
m2=abs(w[i]-res[j])
res.append(m2)
res=list(set(res))
if(0 in res):
res.remove(0)
print(len(res))
90分,最后一个测试数据超时。时间复杂度O(n²)。
所以接下来用动态规划。