📌문제


📌코드
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
dp = [[0] * (k + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
w, v = map(int, input().split())
for j in range(1, k + 1):
if j - w >= 0:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w] + v)
else:
dp[i][j] = dp[i-1][j]
print(dp[n][k])
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
dp = [0] * (k + 1)
for i in range(1, n + 1):
w, v = map(int, input().split())
for j in range(k, 0, -1):
if w <= j:
dp[j] = max(dp[j], dp[j-w] + v)
print(dp[k])
📌풀이
- 물건의 무게와 가치

- 2차원 배열

- 1차원 배열

w = 6, v = 13
dp[7] = max(dp[7], dp[7 - 6] + 13) = max(0, 0 + 13) = 13
dp[6] = max(dp[6], dp[6 - 6] + 13) = max(0, 0 + 13) = 13
w = 3, v = 6
dp[7] = max(dp[7], dp[7 - 3] + 6) = max(dp[7], dp[4] + 6)
= max(13, 8 + 6) = 14
참고