μ΄ λ¬Έμ λ μκ°ν κ² λ³΄λ€ μ΄λ €μ λ€. DPλ‘ νμ΄μΌκ² λ€κ³ μκ°μ νκ³ μ§°λλ° λ°°μ΄ 1μμλΆν° μμνλ λ μ§ κ³μ°μ μ΄λ»κ² ν΄μΌν μ§ κ°μ΄ μμλ€.
κ·Έλμ μλ΄μ‘λ μμλ₯Ό λ§μ§λ§λ μμλΆν° μμνμλ€.
μΌλ¨ μλ΄μ μ‘μμ μλ λ κ³Ό μλ΄μ μ‘μ μ μλ λ λ‘ μ‘°κ±΄μ λλλ€.
1. μλ΄μ μ‘μΌλ©΄ ν΄μ¬μΌμ λκΈ°λ κ²½μ°
DP[i] = DP[i+1] μ λ μ μ‘μ μλ΄ κ°κ²© λμ
2. μλ΄ μ‘μ μ μλ κ²½μ°
max(DP[i+1], DP[i+time[i]]+Price[i]) μ λ μ μ‘μ μλ΄κ°κ²©κ³Ό (μ€λμλ΄κ°κ²©+μλ΄μΌμ§λνμ μλ΄κ°κ²©) μ€ ν° κ°
def main():
n = int(input())
max_price_list = [0 for _ in range(n + 2)]
time_list = [0 for _ in range(n + 2)]
price_list = [0 for _ in range(n + 2)]
for day in range(1, n + 1):
time, price = map(int, input().split())
time_list[day] = time
price_list[day] = price
max_price_list[day] = price
for day in range(n, 0, -1):
if time_list[day] + day - 1 > n: # μλ΄μ‘μΌλ©΄ ν΄μ¬μΌ λκΈΈ κ²½μ°
max_price_list[day] = max_price_list[day + 1]
else:
max_price_list[day] = max(max_price_list[day + 1], price_list[day] + max_price_list[day + time_list[day]])
print(max_price_list[1])
if __name__ == '__main__':
main()
'ALGORITHM' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[DFS/BFS] λ°±μ€ 1260 λ¬Έμ νμ΄ (0) | 2020.10.26 |
---|---|
[μ΄μ§νμ] programmers μ κ΅ μ¬μ¬ λ¬Έμ νμ΄ (0) | 2020.10.11 |
[TSP] λ°±μ€ 10971 λ¬Έμ νμ΄ (0) | 2020.09.19 |
[Stack] λ°±μ€ 3986 λ¬Έμ νμ΄ (0) | 2020.09.19 |
[DP] λ°±μ€ 1463 λ¬Έμ νμ΄ (0) | 2020.09.15 |