AcWing 2. 01背包问题(python)
原题链接
简单
作者:
顾_9
,
2025-01-18 10:08:59
,
所有人可见
,
阅读 1
def find_max_value_package(v_arr, w_arr, v):
"""
动态规划:
- dp[i][j]表示考虑第i个物体,容量上限为v的最高value
- 状态转移方程
- dp[i][j] = max(dp[i-1][j], dp[i - 1][j - v[i]])
- 说明:dp[i-1][j]代表没有放入i的最优值,dp[i-1][j-v[i]]代表放入了i的最优值
- return dp[i][v]
"""
dp = [0] * (v + 1)
for i in range(n):
for j in range(v, -1, -1):
if j - v_arr[i] >= 0:
dp[j] = max(dp[j], dp[j - v_arr[i]] + w_arr[i])
return dp[v]
if __name__ == '__main__':
n, max_v = map(int, input().split())
v_arr, w_arr = [], []
for _ in range(n):
v, w = map(int, input().split())
v_arr.append(v)
w_arr.append(w)
print(find_max_value_package(v_arr, w_arr, max_v))