题解 | #【模板】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

全部评论

相关推荐

头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务