[λ°±μ€ 2156 π₯] ν¬λμ£Ό μμ
https://www.acmicpc.net/problem/2156
2156λ²: ν¬λμ£Ό μμ
ν¨μ£Όλ ν¬λμ£Ό μμνμ κ°λ€. κ·Έ κ³³μ κ°λλ, ν μ΄λΈ μμ λ€μν ν¬λμ£Όκ° λ€μ΄μλ ν¬λμ£Ό μμ΄ μΌλ ¬λ‘ λμ¬ μμλ€. ν¨μ£Όλ ν¬λμ£Ό μμμ νλ €κ³ νλλ°, μ¬κΈ°μλ λ€μκ³Ό κ°μ λ κ°μ§ κ·
www.acmicpc.net
λ¬Έμ
ν¨μ£Όλ ν¬λμ£Ό μμνμ κ°λ€. κ·Έ κ³³μ κ°λλ, ν μ΄λΈ μμ λ€μν ν¬λμ£Όκ° λ€μ΄μλ ν¬λμ£Ό μμ΄ μΌλ ¬λ‘ λμ¬ μμλ€. ν¨μ£Όλ ν¬λμ£Ό μμμ νλ €κ³ νλλ°, μ¬κΈ°μλ λ€μκ³Ό κ°μ λ κ°μ§ κ·μΉμ΄ μλ€.
- ν¬λμ£Ό μμ μ ννλ©΄ κ·Έ μμ λ€μ΄μλ ν¬λμ£Όλ λͺ¨λ λ§μ μΌ νκ³ , λ§μ νμλ μλ μμΉμ λ€μ λμμΌ νλ€.
- μ°μμΌλ‘ λμ¬ μλ 3μμ λͺ¨λ λ§μ€ μλ μλ€.
ν¨μ£Όλ λ μ μλ λλ‘ λ§μ μμ ν¬λμ£Όλ₯Ό λ§λ³΄κΈ° μν΄μ μ΄λ€ ν¬λμ£Ό μμ μ νν΄μΌ ν μ§ κ³ λ―Όνκ³ μλ€. 1λΆν° nκΉμ§μ λ²νΈκ° λΆμ΄ μλ nκ°μ ν¬λμ£Ό μμ΄ μμλλ‘ ν μ΄λΈ μμ λμ¬ μκ³ , κ° ν¬λμ£Ό μμ λ€μ΄μλ ν¬λμ£Όμ μμ΄ μ£Όμ΄μ‘μ λ, ν¨μ£Όλ₯Ό λμ κ°μ₯ λ§μ μμ ν¬λμ£Όλ₯Ό λ§μ€ μ μλλ‘ νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μλ₯Ό λ€μ΄ 6κ°μ ν¬λμ£Ό μμ΄ μκ³ , κ°κ°μ μμ μμλλ‘ 6, 10, 13, 9, 8, 1 λ§νΌμ ν¬λμ£Όκ° λ€μ΄ μμ λ, 첫 λ²μ§Έ, λ λ²μ§Έ, λ€ λ²μ§Έ, λ€μ― λ²μ§Έ ν¬λμ£Ό μμ μ ννλ©΄ μ΄ ν¬λμ£Ό μμ΄ 33μΌλ‘ μ΅λλ‘ λ§μ€ μ μλ€.
μ λ ₯
첫째 μ€μ ν¬λμ£Ό μμ κ°μ nμ΄ μ£Όμ΄μ§λ€. (1 ≤ n ≤ 10,000) λμ§Έ μ€λΆν° n+1λ²μ§Έ μ€κΉμ§ ν¬λμ£Ό μμ λ€μ΄μλ ν¬λμ£Όμ μμ΄ μμλλ‘ μ£Όμ΄μ§λ€. ν¬λμ£Όμ μμ 1,000 μ΄νμ μμ΄ μλ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ μ΅λλ‘ λ§μ€ μ μλ ν¬λμ£Όμ μμ μΆλ ₯νλ€.

λ¬Έμ νμ΄
- μ΄μ μ νμλ λ°±μ€ 2579λ² κ³λ¨ λ¬Έμ μ μ μ¬ν΄μ νμ΄λ²μ λ°λ‘ μκ°ν΄λΌ μ μμλ€.
- μ΄ λ¬Έμ μμ Dynamic Programmingμ μ΄μ©ν΄μ νΈλ λ¬Έμ μλ€.
- dp[i] : iλ²μ§Έ μμΉκΉμ§ νμνμ λ λ§μ€ μ μλ ν¬λμ£Ό μμ μ΅λκ°μ μ μ₯νλ€.
- μ°μ , λ§μ½ nμ΄ 2 μ΄νλΌλ©΄ 3λ² μ°μ λ§μ€ μ μλ€λ 쑰건μ ν΄λΉν μ μμΌλ―λ‘ λ¬΄μ‘°κ±΄ ν¬λμ£Όλ₯Ό λͺ¨λ λ§μ μΌ μ΅λκ°μ΄κΈ° λλ¬Έμ ν¬λμ£Ό μμ λͺ¨λ ν©νκ³ μΆλ ₯ν λ€ νλ‘κ·Έλ¨μ μ’ λ£νλ€.
- nμ΄ 3 μ΄μμ΄λΌλ©΄ μ°μ 1λ²κ³Ό 2λ²κΉμ§ νμνμ λλ μμμ μ€λͺ ν λ°μ κ°μ΄ μλ ν¬λμ£Όλ₯Ό λ€ λ§μλ κ²½μ°κ° μ΅λκ°μ΄κΈ° λλ¬Έμ dp[1]=wine[1]κ³Ό dp[2]=wine[1]+wine[2]λ‘ μ΄κΈ°ννλ€.
- 3λ²μ§Έ μλΆν° forλ¬ΈμΌλ‘ λ°λ³΅νλ©΄μ dpκ°μ μ±μλ£μ΄μ£Όλλ°, μ΄ μΈ κ°μ§ κ²½μ°λ₯Ό κ³ λ €ν μ μλ€.
- μ μ μΉΈμ μ ννμ§ μκ³ , μ΄μ μΉΈμ μ ννλ κ²½μ° μ¦, μ°μν΄μ λ μμ λ§μλ κ²½μ°μ΄λ€. (xoo)
- μ΄ κ²½μ° dp[i-3]+wine[i-1]+wine[i]λ‘ ννν μ μλ€.
- μ΄μ μΉΈμ μ ννμ§ μλ κ²½μ° (oxo)
- μ΄ κ²½μ° dp[i-2]+wine[i]λ‘ ννν μ μλ€.
- κ·Έλ¦¬κ³ νμ¬ μμ μ ννμ§ μλ κ²½μ°(oox)
- μ΄ κ²½μ° dp[i-1]λ‘ ννν μ μλ€.
- μ΄ μΈ κ°μ§ κ²½μ° μ€ κ°μ₯ ν° κ°μ dp[i] κ°μΌλ‘ κ°±μ νλ€.
- μ μ μΉΈμ μ ννμ§ μκ³ , μ΄μ μΉΈμ μ ννλ κ²½μ° μ¦, μ°μν΄μ λ μμ λ§μλ κ²½μ°μ΄λ€. (xoo)
- μ΄λ¬ν κ³Όμ μ κ±°μ³μ dp[n]μ μ μ₯λ κ°μ΄ nλ²μ§ΈκΉμ§ λ§μ ¨μ λ μ»μ μ μλ μ΅λκ°μ΄λ―λ‘ dp[n]μ μΆλ ₯νκ³ νλ‘κ·Έλ¨μ μ’ λ£νλ€.
import sys
n=int(sys.stdin.readline())
wine=[int(sys.stdin.readline()) for _ in range(n)]
if n<=2:
print(sum(wine))
sys.exit(0)
wine.insert(0,0)
dp=[0]*(n+1)
dp[1]=wine[1]
dp[2]=wine[1]+wine[2]
for idx in range(3,n+1):
# νμ¬ μμ λ§μλ κ²½μ°μ μ΅λκ°
drink=max(dp[idx-3]+wine[idx-1], dp[idx-2])+wine[idx]
not_drink=dp[idx-1]
dp[idx]=max(drink, not_drink)
print(dp[n])