思路
这题用dfs会超时。
用集合来做,
初始化集合只有0这个元素,
遍历到第i种砝码,
分别用集合内的元素加上这种砝码的不同的组合的重量,
把这些值加入到集合内,
重复这个过程,
集合长度就是答案。
时间复杂度O(砝码个数*集合元素个数)
空间复杂度O(集合元素个数*max(某种砝码的个数))
题目链接
代码
import sys
w = None
n = None
cnt = 1
for line in sys.stdin:
line = line.strip().split(" ")
if cnt == 2:
w = line
if cnt == 3:
n = line
cnt += 1
if w:
w = [int(e) for e in w]
if n:
n = [int(e) for e in n]
ws = {0}
for sub_w, sub_n in zip(w, n):
lst = []
for i in range(sub_n+1):
for acc_w in ws:
lst.append(acc_w+i*sub_w)
for e in lst:
ws.add(e)
print(len(ws))