题解 | #称砝码#
称砝码
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