题解 | #完全背包#
完全背包
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