题解 | #称砝码#
称砝码
http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
分享一种思路:转换成背包问题。先求所有砝码加一起能称出的最大质量totalW,然后每个砝码的价值就是其质量。遍历出背包容量为j时,包内最多能装下多少质量。最后判断有多少个dp[j]==j。
while 1:
try:
n = int(input())
tmp1 = input().split(' ') # 重量
tmp2 = input().split(' ') # 对应的个数
arr = []
for i in range(n): # 逐个砝码
for j in range(int(tmp2[i])):
arr.append(int(tmp1[i]))
totalw = sum(arr) # 所有砝码总重量
dp = [0 for i in range(totalw+1)]
for i in range(len(arr)):
for j in range(totalw, arr[i]-1, -1):
dp[j] = max(dp[j], dp[j-arr[i]] + arr[i])
res = 0
for i in range(len(dp)):
if dp[i] == i:
res += 1
print(res)
except:
break

查看4道真题和解析