practivceAlgorithm/백준
[백준][Python] 12865 평범한 배낭
findTheValue
2021. 7. 25. 18:06
0,1 knapsack 선택하느냐 마느냐의 문제는 greedy가 안되기 때문에
점화식을 세울 수 있다면 dp 아니면 완탐이다.
K라는 무게값을 1~target값까지 증가시키며 최고 가치를 누적시키면 된다.
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
wei_cost = [[0,0]]
dp = [[0 for _ in range(K + 1)] for _ in range(N + 1)]
for _ in range(N):
wei_cost.append(list(map(int, input().split())))
for i in range(1, N + 1):
for j in range(1, K + 1):
weight = wei_cost[i][0]
cost = wei_cost[i][1]
if j < weight:
dp[i][j] = dp[i - 1][j]
else:
dp[i][j] = max(cost + dp[i - 1][j - weight], dp[i - 1][j])
print(dp[N][K])