01背包
问题描述
题目链接:https://www.lanqiao.cn/problems/1174/learning/?page=1&first_category_id=1&problem_id=1174
特点:每件物品只能拿或者不拿。
解法1
设置状态:dp[i][j]指的是前i件物品重量为j的最大价值。
第i件物品,可以有两种状态:
拿: dp[i][j] = dp[i-1][j-wi] + v[i] 保证这件物品能放下:j≥wi
不拿:dp[i][j] = dp[i-1][j]
取上面两者的最大值。
代码:
n, W = map(int, input().split())
w = [0] * (n+1)
v = [0] * (n+1)
# 输入数据
for i in range(n):
w[i+1], v[i+1] = map(int, input().split())
# 创建状态
dp = [[0] * (W+1) for _ in range(n+1)]
for i in range(1, n+1):
for j