AcWing 4. 多重背包问题 I (python)
原题链接
简单
作者:
顾_9
,
2025-01-18 10:52:38
,
所有人可见
,
阅读 1
def get_max_value_in_package(v_arr, w_arr, s_arr, V):
"""
多重背包问题:
- dp[i, j]代表考虑第i个元素,体积上限为j时,能够装下的最大重量
- 状态转移方程:
- dp[i, j] = max(dp[i - 1][j], dp[i - 1][j - n * v_arr[i]] + w_arr[i]) for n in range(s_arr[i])
"""
n = len(v_arr)
dp = [0] * (V + 1)
for i in range(n):
for j in range(V, -1, -1):
k = 1
while k <= s_arr[i] and j - k * v_arr[i] >= 0:
dp[j] = max(dp[j], dp[j - k * v_arr[i]] + k * w_arr[i])
k += 1
return dp[V]
if __name__ == '__main__':
N, V = map(int, input().split())
v_arr, w_arr, s_arr = list(), list(), list()
for _ in range(N):
v, w, s = map(int, input().split())
v_arr.append(v)
w_arr.append(w)
s_arr.append(s)
max_value = get_max_value_in_package(v_arr, w_arr, s_arr, V)
print(max_value)