题解 | #【模板】01背包#

【模板】01背包

https://www.nowcoder.com/practice/fd55637d3f24484e96dad9e992d3f62e

import sys


while True:
    try:
        n, V = map(int, input().split())
        lv, lw = [], []
        for i in range(n):
            l = list(map(int, input().split()))
            lv.append(l[0])  
            lw.append(l[1])  

        dp = [0 for _ in range(V + 1)] 
        dp2 =[float("-inf") for _ in range(V+1)]
        dp2[0] =0
        for i in range(n):
		#通过打印dp数组观察,倒序遍历能保证每个物品只用一次,
            for j in range(V, -1, -1): 
                if  lv[i]<=j:
                    #print(lv[i],j)
                    dp[j] = max(dp[j], dp[j - lv[i]] + lw[i]) 
                    dp2[j] = max(dp2[j], dp2[j-lv[i]]+lw[i])
                    #print(dp)
                    #print(dp2)
        print(max(dp))
        print(dp2[-1] if dp2[-1]!=float("-inf") else 0)
        # print(dp)
        # print(dp2)
        # for i in range(n):
        #     for j in range(V+1):
                
        #         if  lv[i]<=j:
                    
        #             dp[j] = max(dp[j], dp[j - lv[i]] + lw[i]) 
        #             #dp2[j] = max(dp2[j], dp2[j-lv[i]]+lw[i])
        #         print(lv[i],j) 
        #         print(dp)

    except:
        break

全部评论

相关推荐

04-25 18:13
五邑大学 Java
无面如何呢:用心包装一下自己的实习
点赞 评论 收藏
分享
高斯林的信徒:武大简历挂?我勒个骚岗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务