题解 | #称砝码#

称砝码

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
全部评论
测试改了,这个题用背包已经过不了 超时例题 10 2000 1999 1998 1997 1996 1995 1994 1993 1992 1991 10 10 10 10 10 10 10 10 10 10
点赞 回复
分享
发布于 2022-01-18 16:06

相关推荐

点赞 评论 收藏
转发
12 2 评论
分享
牛客网
牛客企业服务