题解 | #【模板】完全背包#

【模板】完全背包

https://www.nowcoder.com/practice/237ae40ea1e84d8980c1d5666d1c53bc

import sys

s = input().split()

n, V = int(s[0]), int(s[1])
i = 1
things = []
while i <= n:
    things.append(list(map(int, input().split())))
    i += 1

dp = [0 for i in range(V + 1)]
#把这里初始化为负无穷,dp2的首个元素初始化为0只有当j=things[i][0]的时候才可以取到dp2等于0的价值,否则的话,dp2永远是无穷和负无穷比较
dp2 = [float("-inf") for i in range(V + 1)]
dp2[0] =0

for i in range(n):
  #因为物品i的数量是无限制的,只要背包的容量够,就可以一直加,所以用正序遍历,背包容量,这个时候,dp数组的值可以重复利用,同一个物品可以使用多次
    for j in range(V + 1):
        if things[i][0] <= j:
            #print(things[i][0], j)
            #print(dp)
            dp[j] = max(dp[j], dp[j - things[i][0]] + things[i][1])
            dp2[j] = max(dp2[j], dp2[j - things[i][0]] + things[i][1])
print(max(dp))
print(dp2[-1] if dp2[-1]!=float("-inf" ) else 0)
#print(dp2)

# #print(dp)
# print(max(dp))
# if dp[V]==dp[V-1]:
#     print(0)
# else:
#     print(dp[V])

全部评论

相关推荐

牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务