[λ°±μ€ 11034λ²] [π₯3] ν΄μ¬ (python)
λ¬Έμ
μλ΄μμΌλ‘ μΌνκ³ μλ λ°±μ€μ΄λ ν΄μ¬λ₯Ό νλ €κ³ νλ€.
μ€λλΆν° N+1μΌμ§Έ λλ λ ν΄μ¬λ₯Ό νκΈ° μν΄μ, λ¨μ NμΌ λμ μ΅λν λ§μ μλ΄μ νλ €κ³ νλ€.
λ°±μ€μ΄λ λΉμμκ² μ΅λν λ§μ μλ΄μ μ‘μΌλΌκ³ λΆνμ νκ³ , λΉμλ ν루μ νλμ© μλ‘ λ€λ₯Έ μ¬λμ μλ΄μ μ‘μλμλ€.
κ°κ°μ μλ΄μ μλ΄μ μλ£νλλ° κ±Έλ¦¬λ κΈ°κ° Tiμ μλ΄μ νμ λ λ°μ μ μλ κΈμ‘ Piλ‘ μ΄λ£¨μ΄μ Έ μλ€.
N = 7μΈ κ²½μ°μ λ€μκ³Ό κ°μ μλ΄ μΌμ νλ₯Ό 보μ.
Β | 1μΌ | 2μΌ | 3μΌ | 4μΌ | 5μΌ | 6μΌ | 7μΌ |
---|---|---|---|---|---|---|---|
Ti | 3 | 5 | 1 | 1 | 2 | 4 | 2 |
Pi | 10 | 20 | 10 | 20 | 15 | 40 | 200 |
1μΌμ μ‘νμλ μλ΄μ μ΄ 3μΌμ΄ 걸리며, μλ΄νμ λ λ°μ μ μλ κΈμ‘μ 10μ΄λ€. 5μΌμ μ‘νμλ μλ΄μ μ΄ 2μΌμ΄ 걸리며, λ°μ μ μλ κΈμ‘μ 15μ΄λ€.
μλ΄μ νλλ° νμν κΈ°κ°μ 1μΌλ³΄λ€ ν΄ μ μκΈ° λλ¬Έμ, λͺ¨λ μλ΄μ ν μλ μλ€. μλ₯Ό λ€μ΄μ 1μΌμ μλ΄μ νκ² λλ©΄, 2μΌ, 3μΌμ μλ μλ΄μ ν μ μκ² λλ€. 2μΌμ μλ μλ΄μ νκ² λλ©΄, 3, 4, 5, 6μΌμ μ‘νμλ μλ΄μ ν μ μλ€.
λν, N+1μΌμ§Έμλ νμ¬μ μκΈ° λλ¬Έμ, 6, 7μΌμ μλ μλ΄μ ν μ μλ€.
ν΄μ¬ μ μ ν μ μλ μλ΄μ μ΅λ μ΄μ΅μ 1μΌ, 4μΌ, 5μΌμ μλ μλ΄μ νλ κ²μ΄λ©°, μ΄λμ μ΄μ΅μ 10+20+15=45μ΄λ€.
μλ΄μ μ μ ν νμ λ, λ°±μ€μ΄κ° μ»μ μ μλ μ΅λ μμ΅μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ N (1 β€ N β€ 15)μ΄ μ£Όμ΄μ§λ€.
λμ§Έ μ€λΆν° Nκ°μ μ€μ Tiμ Piκ° κ³΅λ°±μΌλ‘ ꡬλΆλμ΄μ μ£Όμ΄μ§λ©°, 1μΌλΆν° NμΌκΉμ§ μμλλ‘ μ£Όμ΄μ§λ€. (1 β€ Ti β€ 5, 1 β€ Pi β€ 1,000)
μΆλ ₯
첫째 μ€μ λ°±μ€μ΄κ° μ»μ μ μλ μ΅λ μ΄μ΅μ μΆλ ₯νλ€.
μμ μ λ ₯ 1
7
3 10
5 20
1 10
1 20
2 15
4 40
2 200
μμ μΆλ ₯ 1
45
μμ μ λ ₯ 2
10
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
μμ μΆλ ₯ 2
55
νμ΄
- DP ν μ΄λΈ μ μ: DP[i]λ iλ²μ§Έ λ λΆν° ν΄μ¬ν λκΉμ§ μ»μ μ μλ μ΅λ μ΄μ΅μ μ μ₯νλ€.
- DP ν μ΄λΈ μ΄κΈ°ν: λ§μ§λ§ λ μΈ n+1μΌμ μ΄μ΅μ 0
- DP μ νμ: DP[i]λ iλ²μ§Έ λ μ μΌμ νλ κ²½μ°μ μΌμ νμ§ μλ κ²½μ° μ€μμ λ ν° κ°μ΄ λλ€.
- iλ²μ§Έ λ μ μλ΄μ ν μ μλ κ²½μ°: DP[i] = DP[i+1]
- iλ²μ§Έ λ μ μλ΄μ ν μ μλ κ²½μ°: DP[i] = max(P[i] + DP[i + T[i]], DP[i+1])
- κ²°κ³Ό μΆλ ₯: DP[1]μ μΆλ ₯νλ€.
μ½λ
ver(1)
import sys
input = sys.stdin.readline
# μ
λ ₯ λ°κΈ°
n = int(input())
k = [list(map(int,input().split())) for _ in range(n)]
# dp ν
μ΄λΈ μ΄κΈ°ν
dp = [0] *(n+1)
# λ€μμλΆν° dp μ§ν
for i in range(n-1,-1,-1):
if i + k[i][0] > n: # μΈλ±μ€ λ²μλ₯Ό μ΄κ³Όνλ κ²½μ°, νμ¬ μμΉμ κ°μ λ€μ κ°μΌλ‘ μ
λ°μ΄νΈ
dp[i] = dp[i+1]
else: # μΈλ±μ€ λ²μ λ΄μ μλ κ²½μ°, λ€μ μλ κ°λ€κ³Ό νμ¬ μμΉμ κ°μ λΉκ΅ν΄μ μ΅λκ°μ μ μ₯
dp[i] = max(dp[i+1], k[i][1] + dp[i + k[i][0]])
# dp ν
μ΄λΈμμ μ΅λκ° μΆλ ₯
print(max(dp))
λκΈλ¨κΈ°κΈ°