λ¬Έμ
μ΄ λ¬Έμ λ μμ£Ό νλ²ν λ°°λμ κ΄ν λ¬Έμ μ΄λ€.
ν λ¬ νλ©΄ κ΅κ°μ λΆλ¦μ λ°κ² λλ μ€μλ μ¬νμ κ°λ €κ³ νλ€. μΈμκ³Όμ λ¨μ μ μ¬νΌνλ©° μ΅λν μ¦κΈ°κΈ° μν μ¬νμ΄κΈ° λλ¬Έμ, κ°μ§κ³ λ€λ λ°°λ λν μ΅λν κ°μΉ μκ² μΈλ €κ³ νλ€.
μ€μκ° μ¬νμ νμνλ€κ³ μκ°νλ Nκ°μ λ¬Όκ±΄μ΄ μλ€. κ° λ¬Όκ±΄μ λ¬΄κ² Wμ κ°μΉ Vλ₯Ό κ°μ§λλ°, ν΄λΉ 물건μ λ°°λμ λ£μ΄μ κ°λ©΄ μ€μκ° Vλ§νΌ μ¦κΈΈ μ μλ€. μμ§ νκ΅°μ ν΄λ³Έ μ μ΄ μλ μ€μλ μ΅λ Kλ§νΌμ 무κ²λ§μ λ£μ μ μλ λ°°λλ§ λ€κ³ λ€λ μ μλ€. μ€μκ° μ΅λν μ¦κ±°μ΄ μ¬νμ νκΈ° μν΄ λ°°λμ λ£μ μ μλ 물건λ€μ κ°μΉμ μ΅λκ°μ μλ €μ£Όμ.
μ λ ₯
첫 μ€μ λ¬Όνμ μ N(1 ≤ N ≤ 100)κ³Ό μ€μκ° λ²νΈ μ μλ λ¬΄κ² K(1 ≤ K ≤ 100,000)κ° μ£Όμ΄μ§λ€. λ λ²μ§Έ μ€λΆν° Nκ°μ μ€μ κ±°μ³ κ° λ¬Όκ±΄μ λ¬΄κ² W(1 ≤ W ≤ 100,000)μ ν΄λΉ 물건μ κ°μΉ V(0 ≤ V ≤ 1,000)κ° μ£Όμ΄μ§λ€.
μ λ ₯μΌλ‘ μ£Όμ΄μ§λ λͺ¨λ μλ μ μμ΄λ€.
μΆλ ₯
ν μ€μ λ°°λμ λ£μ μ μλ 물건λ€μ κ°μΉν©μ μ΅λκ°μ μΆλ ₯νλ€.
μμ μ λ ₯ 1
4 7
6 13
4 8
3 6
5 12
μμ μΆλ ₯ 1
14
νμ΄
import sys
n, k = map(int, sys.stdin.readline().split())
dy = [ 0 for _ in range(k+1)]
weight_sum = 0
for _ in range(n):
w, v = map(int, sys.stdin.readline().split())
for i in range(k, w-1, -1):
dy[i] = max(dy[i], dy[i-w] + v)
# print(dy)
print(dy[k])
# 4 7
# 6 13
# 4 8
# 3 6
# 5 12
Dynamic programming λμ κ³νλ²