from 動的計画法 DP_E
問題文 E - Knapsack 2
python
def solve(N, W, WV):
MAX_VALUE = N * 10 ** 3
weights = [INF] * (MAX_VALUE + 1)
weights[0] = 0
for i in range(N):
next_weights = weights[:]
weight, value = WV[i]
for j in range(MAX_VALUE - value + 1):
next_weights[j + value] = min(
weights[j + value],
weights[j] + weight)
weights = next_weights
for i in range(MAX_VALUE, -1, -1):
if weights[i] <= W:
return i