分享一种思路:转换成背包问题。先求所有砝码加一起能称出的最大质量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