题解 | 【模板】01背包

import sys

line = sys.stdin.readline().strip()
n,V = map(int,line.split())
Mat = []
for _ in range(n):
    line = sys.stdin.readline().strip()
    Mat.append(list(map(int,line.split())))
dp = [[0 for i in range(V+1)] for j in range(n+1)]

for i in range(1, n+ 1):
    for j in range(1, V+1):
        dp[i][j] = dp[i-1][j]
        vv = Mat[i - 1][0]
        ww = Mat[i - 1][1]
        if j < vv: continue
        dp[i][j] = max(dp[i - 1][j - vv] + ww, dp[i][j])
print(dp[n][V])
# 上面是不装满, 下面是装满


dp = [[0 for i in range(V+1)] for j in range(n+1)]
for i in range(1, n+ 1):
    for j in range(1, V+1):
        dp[i][j] = dp[i-1][j]
        vv = Mat[i - 1][0]
        ww = Mat[i - 1][1]
        if j < vv: continue
        elif j - vv == 0:
            dp[i][j] = max(dp[i - 1][j - vv] + ww, dp[i][j])
        elif j - vv != 0 and dp[i - 1][j - vv] != 0:
            dp[i][j] = max(dp[i - 1][j - vv] + ww, dp[i][j])
print(dp[n][V])



有几率超时,卡着过的

dp 原来01背包比无限背包复杂一点,01背包要开二维数组,用一维数组会抽象点

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-21 17:59
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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