https://www.acmicpc.net/problem/28303
Nμ μ΅λκ°μ΄ 500,000μ΄λ€. μκ°μ νμ 2μ΄λ λμ§λ§, N**2 κ°μ 건 μ λ μ λλ€.
μ΄λ° κ±Έ κ³ λ €ν΄μ μ²μμλ DP, 그리λ, λμ ν©, ν¬ν¬μΈν° λ±λ± μκ°νμλλ° 1μκ° μ λ μμ΄λμ΄λ μ λμλ€.
κ²°κ΅ μκ³ λ¦¬μ¦ λΆλ₯λ₯Ό νμΈνλ€. λμ ν© μΈκ±Έ νμΈνκ³ μ΅λν λμ ν© μκ³ λ¦¬μ¦μ μ μ©νλ €κ³ νλ€.
μ½λ μμ± μ€κ°μ λ΄κ° μνλ λ‘μ§μ ꡬννκΈ° μν΄ μΈν°λ· κ²μλ μ¬μ©νλ€.
μ€μ ν μ€νΈ νκ²½μ΄μλ€λ©΄ λͺ» νμμ κ±° κ°λ€.
νμ§λ§ κ²½νμ μμΌλ©΄ μΆ©λΆν ν΄κ²°ν λ§ν λ¬Έμ λμ΄λλΌκ³ μκ°νλ€. κΈμ μ μΈ λλμ λ°μλ€.
1. λ¬Έμ λ₯Ό ν΄κ²°ν λ μ¬μ©νλ μκ³ λ¦¬μ¦μ λν νμ (κ²½ν)
2. μ€κ°μ€κ° μνλ λ‘μ§μ ꡬνν λ₯λ ₯ (κ²½ν)
μμ΄λμ΄
μ΄κ²μ κ² μ μ΄λ³΄λ©΄μ κ·μΉ μ°Ύμλ³΄λ €κ³ νλ€.
f(1, 2) + f(2, 3) = f(1, 3) κ°μ λλμ κ·μΉμ λ°κ²¬νκ³ μμμΌλ‘ μ¨λ΄€λ€.
NS λ°©ν₯μ κ³ μ νλ€λ μ μ νμ κ΅¬κ° a, bμ λν΄μ λ°°ν°λ¦¬μ μλμ§ λ³νκ°μ ꡬνλ ν¨μ fλ λ€μκ³Ό κ°λ€.
f(a, b) = A(a) - A(b) - (b - a) * K // (A(i)λ iλ²μΉΈ μλμ§ μμ, a, bλ λ²νΈ | a < b)
μ¬κΈ° fλΌλ ν¨μλ λ€μκ³Ό κ°μ 쑰건μ λ§μ‘±νλ€.
f(a, b) + f(b, c)
= A(a) - A(b) - (b - a) * K + A(b) - A(c) - (c - a) * K
= A(a) - A(c) - (a - c) * K
= f(a, c) //(a < b < c)
∴ f(a, b) + f(b, c) = f(a, c)
μμ κ°μ ν¨μμ νΉμ§μ λ»νλ μ©μ΄λ₯Ό μ΄μ°μν κ°μ νκ΅ μμ μ λ°°μ΄ κ±° κ°μλ° μ κΈ°μ΅μ΄ λμ§ μλλ€. νΉμ μλ λΆμ μλ €μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
fμ μ±μ§μ μ΄μ©ν΄ λ²νΈ μ°¨μ΄κ° 1μΈκ±Έ κΈ°μ€μΌλ‘ λ°°μ΄μ μμ±νλ€. μ) [f(1,2), f(2,3), f(3,4), f(4,5)]
μ΄ λ°°μ΄μ μ΄μ©νλ©΄ μμ λ°©ν₯μ΄ NSμΌ λμ λͺ¨λ μλμ§ λ³νκ°μ ꡬν μ μλ€.
μ°λ¦¬λ μ΅λκ°μ ꡬν κ±°λκΉ μ΄ λ°°μ΄μ μ°μ ꡬκ°μ μ΅λ ν©μ ꡬν΄μ£Όλ©΄ λλ€.
SNλ°©ν₯λ μμ λ°©λ²μΌλ‘ ꡬνλ©΄ λλ€. μ΅μ’ μ μΌλ‘ NSμ μ΅λκ°, SNμ μ΅λκ°μ λΉκ΅ν΄μ μΆλ ₯νλ©΄ λλ€.
μ 체 μ½λ
N, K = map(int, input().split())
tables = [int(x) for x in input().split()]
arr_NS = []
arr_SN = []
for i in range(1, N): # N-S
arr_NS.append(tables[i - 1] - tables[i] - K)
for i in range(1, N): # S-N
arr_SN.append(tables[i] - tables[i - 1] - K)
temp_NS = [0] * (N - 1)
temp_NS[0] = arr_NS[0]
for i in range(1, N - 1):
temp_NS[i] = max(0, temp_NS[i - 1]) + arr_NS[i]
temp_SN = [0] * (N - 1)
temp_SN[0] = arr_SN[0]
for i in range(1, N - 1):
temp_SN[i] = max(0, temp_SN[i - 1]) + arr_SN[i]
print(max((max(temp_NS),max(temp_SN))))
μ½λ μ€λͺ
for i in range(1, N): # N-S
arr_NS.append(tables[i - 1] - tables[i] - K)
arr_NSλ λ°©ν₯μ NS(Nμ΄ μΌμͺ½), μμμ λ§ν λ²νΈ μ°¨κ° 1μΌ λ, μ¦ μμμ κΈΈμ΄κ° 2μΌ λ μλμ§ λ³νκ°λ€μ΄λ€.
temp_NS = [0] * (N - 1)
temp_NS[0] = arr_NS[0]
for i in range(1, N - 1):
temp_NS[i] = max(0, temp_NS[i - 1]) + arr_NS[i]
λ°°μ΄μ μ°μ ꡬκ°μ μ΅λ ν©μ ꡬνλ μ½λλ€. λμ κ³νλ²(dp)μΌλ‘ ꡬννλ€. μκ°λ³΅μ‘λλ O(n)μ΄λ€.
μμμλΆν° μ λνλ€κ° ν©μ΄ μμκ° λμ€λ©΄ μμ λΆλΆμ λ²λ¦¬λ λ°©μμ΄λ€.
print(max((max(temp_NS),max(temp_SN))))
SNλ κ°μ λ°©λ²μΌλ‘ ꡬν΄μ£Όκ³ , μ΅λκ°μ μΆλ ₯νλ©΄ λλ€.
'𧩠Problem Solving > [λ°±μ€]' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 2447 λ³ μ°κΈ° - 10 (python νμ΄μ¬) (0) | 2023.07.30 |
---|---|
[λ°±μ€] 28018 μκ°μ΄ κ²ΉμΉ κΉ?(feat.imosλ²) (python νμ΄μ¬) (0) | 2023.07.18 |
[λ°±μ€] 28286 μ¬μ±μ μ κΈ°λ€λ¦¬λ μ€ (python νμ΄μ¬) (0) | 2023.07.05 |
[λ°±μ€] 28298 λ νν νμΌ μμΉ λ¬Έμ (python νμ΄μ¬) (0) | 2023.07.04 |
[λ°±μ€] 28250 μ΄λΈ, νμμΌ κ·Έλ¦¬κ³ νΈλ₯Έ MEXμ μλ΄ (C++ cpp) (0) | 2023.07.03 |