1535 : μλ #
μκ°μ ν |
λ©λͺ¨λ¦¬μ ν |
μ λ΅λΉμ¨ |
---|---|---|
2μ΄ |
128MB |
54% |
input
n : μ¬λμ
List[μλ 체λ ₯]
List[μ»λ κΈ°μ¨]
체λ ₯μ΄ 0μ΄ λλ©΄ μ£½μ΄μ μ무 κΈ°μ¨μ λͺ» λλμΌλ‘ μμ μνλ κ²½μ°λ₯Ό λΉΌλ©΄μ 0 μ΄ λ μ μλ€.
output : max(κΈ°μ¨)
λ± λ΄λ dp λ¬Έμ μ²λΌ 보μ.
100μ΄ λμ§ μλ μ μμ
κ·Έλ₯ λ€ ν‘μνλ€λ λ§μΈλ?
κ·Όλ° λ¬Έμ λ κ°μ±λΉκ° μμ’μ κ²μ λν΄μλ μ΄λ»κ² μ²λ¦¬λ₯Ό ν΄μΌν μ§?
κ·Έλ₯ f(n) = max(f(n-1), f(n-2))? μ΄λ°μμΌλ‘ μ κ·Όν΄μΌνλ?
N
: μμ΄ν μ μcost
: μμ΄ν μ λ¬΄κ² λ¦¬μ€νΈvalue
: μμ΄ν μ κ°μΉ 리μ€νΈdp
: λμ νλ‘κ·Έλλ°μ μν 2μ°¨μ λ°°μ΄. dp[i][j]λ iλ²μ§Έ μμ΄ν κΉμ§ κ³ λ €νκ³ , λ°°λμ μ©λμ΄ jμΌ λ μ»μ μ μλ μ΅λ κ°μΉλ₯Ό μ μ₯ν©λλ€.
cost
κ³Όvalue
리μ€νΈμ 맨 μμ 0μ μΆκ°ν©λλ€. μ΄λ κ² 0μ μΆκ°νλ μ΄μ λ μμ΄ν μΈλ±μ€μ μ©λμ 1λΆν° μμνκΈ° μν¨μ λλ€. λ°λΌμ μ€μ μμ΄ν μΈλ±μ€ 1μcost[1]
κ³Όvalue[1]
μ΄ λ©λλ€.2μ°¨μ λ°°μ΄
dp
λ₯Ό μμ±νκ³ λͺ¨λ μμλ₯Ό 0μΌλ‘ μ΄κΈ°νν©λλ€.dp[i][j]
λ iλ²μ§Έ μμ΄ν κΉμ§ κ³ λ €νκ³ , λ°°λμ μ©λμ΄ jμΌ λμ μ΅λ κ°μΉλ₯Ό λνλ λλ€.μ€μ²©λ λ°λ³΅λ¬Έμ μ¬μ©νμ¬
dp
λ°°μ΄μ μ±μλλ€. iλ₯Ό 1λΆν° NκΉμ§ μννλ©° μμ΄ν μ νλμ© κ³ λ €ν©λλ€. jλ₯Ό 1λΆν° 100κΉμ§ μννλ©° λ°°λμ μ©λμ κ³ λ €ν©λλ€.κ°κ°μ (i, j)μ λν΄, λ κ°μ§ κ²½μ°λ₯Ό λΉκ΅ν©λλ€:
κ²½μ° 1: cost[i] (iλ²μ§Έ μμ΄ν μ 무κ²)κ° jλ³΄λ€ μκ±°λ κ°μ λ, μμ΄ν μ λ°°λμ λ£μ μ μμ΅λλ€. λ°λΌμ, dp[i][j]λ₯Ό dp[i-1][j] (i-1λ²μ§Έ μμ΄ν μ κ³ λ €ν λμ κ°μΉ)μ dp[i-1][j-cost[i]] + value[i] (iλ²μ§Έ μμ΄ν μ λ£μμ λμ μ΄ κ°μΉ) μ€μμ λ ν° κ°μΌλ‘ κ°±μ ν©λλ€.
κ²½μ° 2: cost[i] (iλ²μ§Έ μμ΄ν μ 무κ²)κ° jλ³΄λ€ ν¬λ©΄, ν΄λΉ μμ΄ν μ λ°°λμ λ£μ μ μμΌλ―λ‘ dp[i][j]λ₯Ό dp[i-1][j]λ‘ κ°±μ ν©λλ€.
λͺ¨λ μμ΄ν κ³Ό λ°°λ μ©λμ λν΄ κ³μ°μ λ§μΉλ©΄,
dp[N][99]
κ° λ°°λμ μ΅λ μ©λμ΄ 99μΌ λ μ»μ μ μλ μ΅λ κ°μΉλ₯Ό λνλ΄κ² λ©λλ€.
python#
problem_num = 1535
import os, sys
path = os.getcwd() + f"\\txt\\{problem_num}" + ".txt"
sys.stdin = open(path, "r")
input = sys.stdin.readline
n = int(input())
cost = [0] + list(map(int, input().split()))
value = [0] + list(map(int, input().split()))
def happy(n, cost, value):
dp = [[0 for _ in range(101)] for _ in range(n + 1)]
for i in range(1, n + 1):
for j in range(1, 101):
if cost[i] <= j:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - cost[i]] + value[i])
else:
dp[i][j] = dp[i - 1][j]
return dp
dp = happy(n, cost, value)
print(dp[n][100 - 1])
135