π©π»βπ»λ¬Έμ μ€λͺ
βοΈIdea Sketch
λ¬Έμ μμ½
λ¨μ NμΌ λμ μ΅λν λ§μ μλ΄μ νλ €κ³ νλ€. μλ΄μ μλ£νλλ° κ±Έλ¦¬λ κΈ°κ° Tiμ μλ΄μ νμ λ λ°μ μ μλ κΈμ‘ Piλ‘ μ΄λ£¨μ΄μ Έ μλ€. ν΄μ¬ μ μ ν μ μλ μλ΄μ μ΅λ μ΄μ΅μ ꡬνλΌ.
μκ°λ³΅μ‘λ
O(2^n)
κ° λ μ§λ§λ€ μλ΄μ νλ κ²½μ°, κ·Έλ μ§ μμ κ²½μ° μ΄ 2κ°μ§λ₯Ό κ³ λ €νλ€. 2 * 2 * 2 * β¦ μ΄ nλ² κ³±νλ―λ‘ 2^nμ΄λ€.
μκ³ λ¦¬μ¦ : λΈλ£¨νΈν¬μ€ μκ³ λ¦¬μ¦, λ€μ΄λλ―Ή νλ‘κ·Έλλ°
λΈλ£¨νΈν¬μ€ μκ³ λ¦¬μ¦μΌλ‘ ꡬννλ€. DFSλ‘ μλ΄μ νλ κ²½μ°μ κ·Έλ μ§ μλ κ²½μ° λ λ€ ν¨μ νΈμΆνλ€. κ·Έλ¦¬κ³ μ νν ν΄μ¬λ μ§μ λλ¬ν κ²½μ°, μ΅λ μ΄μ΅μ κ³μ°νλ€.
βοΈλ΄ μμ€μ½λ
- μ’ λ£μ‘°κ±΄ : μ νν ν΄μ¬λ μ§ nμ λλ¬ν κ²½μ°, μ΅λ μ΄μ΅μ κ³μ°νλ€.
- n+1μΌμ§Έ μ΄νλΆν°λ νμ¬μ μκΈ° λλ¬Έμ, μ΅λ μ΄μ΅μ ꡬν μ μλ€. λ°λΌμ depthκ° nμ μ΄κ³Όνλ κ²½μ° μ΅λ μ΄μ΅μ κ³μ°νμ§ μλλ€.
- depthμ λ μ§μ μλ΄μ νλ κ²½μ°μ κ·Έλ μ§ μμ κ²½μ° λ λ€ dfs ν¨μλ₯Ό νΈμΆνλ€.
μ 체 μ½λ
import sys
si = sys.stdin.readline
def dfs(depth, price):
global max_price
if depth == n:
max_price = max(max_price, price)
return
if depth > n:
return
t, p = seq[depth]
dfs(depth + t, price + p)
dfs(depth + 1, price)
if __name__ == "__main__":
n = int(si())
seq = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
max_price = 0
dfs(0, 0)
print(max_price)