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

【模板】完全背包

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

同上题类似,由于物品的数量有任意多个,则压缩 dp 后遍历时不采用逆序; 代码如下:

n, v = map(int, input().strip().split())
dp_1 = [0 for _ in range(v + 1)]
dp_2 = [float('-inf') for _ in range(v + 1)]
q, w = [], []
dp_2[0] = 0
for _ in range(n):
    qi, wi = map(int, input().strip().split())
    q.append(qi)
    w.append(wi)
for j in range(n):
    for i in range(v + 1):
        if i >= q[j]:
            dp_1[i] = max(dp_1[i], dp_1[i - q[j]] + w[j])
            dp_2[i] = max(dp_2[i], dp_2[i - q[j]] + w[j])
print(dp_1[-1])
print(dp_2[-1] if dp_2[-1] != float('-inf') else 0)
        
全部评论

相关推荐

10-29 15:51
嘉应学院 Java
后端转测开第一人:你把简历的学历改成北京交通大学 去海投1000份发现基本还是没面试
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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