一、题目
二、代码
运用动态规划的思想,用f集合表示前i个砝码能够称出的重量集,每新加一个砝码,都对f进行更新,并且去重,减少遍历次数。
更新分为两部分:
- 放在同一边 则求和
- 放在不同边 则用abs()求差值
#放在两边
n = int(input())
wei = list(map(int, input().split()))
f = []
for i in range(0, n):
for j in range(0, len(f)):
f.append(f[j]+wei[i])
f.append(abs(f[j]-wei[i]))
f.append(wei[i])
f = list(set(f))//去重
f = set(f)
f.discard(0)//0不算在重量集合内
print(len(f))
##
##f[i] 前i个砝码能够称出的重量集
##加入一个新的砝码i + 1后 f[i+1] =(f[0~len]+wei[i+1]) + abs(f[0~len]-wei[i+1])
结果
能通过90%的样例,Python跑太慢了还有一个不知道咋优化了。。。