题解 | #完全背包#

完全背包

https://www.nowcoder.com/practice/3ed13831e2cc4613866edee237d5a804

class Solution:
    def knapsack(self , v: int, n: int, nums: List[List[int]]) -> List[int]:
        result = [0, 0]
		
        dp = [0] * (v + 1)
        # 一、背包能够装备的最高价值
        for i in range(1, v + 1):
            for j in range(len(nums)):
                if i - nums[j][0] >= 0:
                    dp[i] = max(dp[i], dp[i - nums[j][0]] + nums[j][1])
        
        result[0] = dp[-1]

        dp = [0] * (v + 1)
        # 二、背包刚好能够装备的最高价值:
        for i in range(1, v + 1):
            for j in range(len(nums)):
                # 1、(最关键的情况)情况一正好为空包再加新物品时
                if i - nums[j][0] == 0:
                    dp[i] = max(dp[i], nums[j][1])
                # 2、情况二为不空包情况时加新物品时
                elif i - nums[j][0] > 0 and dp[i - nums[j][0]] != 0:
                    dp[i] = max(dp[i], dp[i - nums[j][0]] + nums[j][1])

        result[1] = dp[-1]

        return result

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务