10844 - μ¬μ΄ κ³λ¨ μ
μ½μ§μμ λ¬Έμ μμ΅λλ€.
μΌλ¨ μμκ°μ΄ κ° μλ¦Ώμμ μ°¨μ΄κ° 1μΈ μλ₯Ό κ²λ¨μλΌκ³ ν λ, μλ¦Ώμκ° μ£Όμ΄μ§λ©΄ ν΄λΉ μλ¦Ώμμμ κ°λ₯ν κ³λ¨ μμ κ²½μ°μ μμ ν©μ μΆλ ₯νλ©΄ λλ λ¬Έμ μ λλ€.
μ΄ λ¬Έμ κ° μ΄λ €μ΄ μ΄μ λ‘λ λ κ°μ§κ° μμ΅λλ€.
μΌλ¨ 첫λ²μ§Έλ‘ κ·μΉμ΄ κΉλ€λ‘μμ μ νμ μΈμ°λ κ±° μμ²΄κ° μ½μ§ μλ€λ κ±°κ³ , λ λ²μ§Έλ‘ μ νμμ λ κ²½μ°λ‘ λλμ΄μ μκ°ν΄λ΄μΌ νλ€λ μ μ λλ€.
μΌλ¨ 첫λ²μ§Έ κ²½μ°λ μμ κ°μ΄ NμΌλ‘ μμνλ κ³λ¨ μμ κ²½μ°μ μλ₯Ό λμ΄ν΄λ΄€μ λ μ²μμ λ³΄κ³ μ΄? μ΄κ±°
dp[i][j] = dp[i-1][j] + dp[i-1][j+1]μΈκ°? λλ
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]μΈκ° μΆμμ΅λλ€.
νλ§λλ‘ νμ¬ μ‘°μ¬μ€μΈ κ²½μ°λ μ΄μ μλ¦Ώμμ μΈλ±μ€ -1μ΄κ±°λ +1μ΄λΌκ³ μκ°νμ΅λλ€.
κ·Έλ¬λ λ κ²½μ° λ€ μ€λ΅μ΄ λμ΅λλ€.
ν΄λΉ λ¬Έμ λ κ·Έλ¦Όμ νλ/μ΄λ‘ νκ΄νμ²λΌ μ νμμ dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1] μ΄λΌλ μ μλκ°μ ννλ‘ μ°ΎμμΌ νμ΄κ° κ°λ₯ν©λλ€. λ§λΆμ¬μ μλκ°μ ννμ¬μΌμ§λ§ 0λ² μΈλ±μ€λ₯Ό μ‘°μ¬ν λ (νμ΄μ¬μ κ²½μ°μ λλ€) -1κ³Ό 1μ μ°Έμ‘°νμ¬ μ νμμΌλ‘ 0λ²μ§Έ μΈλ±μ€λ₯Ό μ μμ μΌλ‘ μ°Έμ‘°νλκ² κ°λ₯ν©λλ€.
λ λ²μ§Έ κ²½μ°λ 9λ‘ μμνλ κ³λ¨ μμ κ²½μ°μ
λλ€.
κ³λ¨ μκ° 9λ‘ μμνκ² λλ©΄ λ€λ₯Έ μ νμμ΄ μ μ©λμ§ μμ΅λλ€.
μ²μμλ dp[i][j-1]μ μ°Έμ‘°νλ©΄ ν΄κ²°λ κΉ μΆμλλ° μμ μλμμ΅λλ€. μ΄ κ²½μ°μλ κ·Έλ¦Όμ λ Έλ νκ΄νμ²λΌ μ μ’λκ°μ μ μλ₯Ό κ°μ Έλ€ μ¨μΌ μ μμ μΈ μ νμμ΄ κ°λ₯ν©λλ€.
N = int(input())
dp = [[0]*9 for _ in range(N)]
for first in range(9):
dp[0][first] = 1
dpλ°°μ΄μ λ§λ€μ΄μ£Όκ³ 첫λ²μ§Έ 리μ€νΈλ λ€ 1λ‘ μ΄κΈ°νν΄μ£Όκ² μ΅λλ€.
for i in range(1,N):
for j in range(9):
2λ²μ§Έ 리μ€νΈλΆν° 1~NκΉμ§μ μλ¦Ώμλ§λ€ 0~8λ‘ μμνλ κ³λ¨ μμ κ²½μ°λ₯Ό λμ νκ² μ΅λλ€.
if j==8:
dp[i][j] = dp[i-1][j-1]
μμ λΆμνλλ‘ νμ¬ 9λ‘ μμνλ κ³λ¨ μμ κ²½μ°μ μλ₯Ό λμ ν΄μ£Όλ €λ©΄ μ μ’λκ°μ μ μ«μλ₯Ό κΈ°μ ν΄μ€μλ€.
else:
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]
κ·Έ κ²½μ°κ° μλλΌλ©΄ μ μ’μ°λκ°μ μ μλ₯Ό νλμ© λ½μ λν κ°μ νμ¬ κ³λ¨ μμ κ²½μ°μ μμ λ£μ΄μ£Όλ©΄ λ©λλ€.
print(sum(dp[N-1])%1000000000)
λ§μ§λ§μΌλ‘ λ¬Έμ 쑰건λλ‘ ν΄λΉ μλ¦Ώμμ κ³λ¨ μμ ν©μ°μ 10μ΅μ λλ λλ¨Έμ§λ₯Ό μΆλ ₯νλ©΄ λ©λλ€.
1932λ² - μ μ μΌκ°ν
μλλ‘ λ΄λ €μ€λ©΄μ λκ°μ μΌλ‘ κ°μ ν©μ°ν μ μλλ° μ΅μ’ μ μΌλ‘ λ΄λ €μμ λ κ°μ₯ ν° κ°μ΄ λλ μλ₯Ό ꡬνλ©΄ λλ λ¬Έμ μ λλ€.
import copy
N = int(input())
lst = []
for _ in range(N):
lst.append(list(map(int,input().split())))
dp = copy.deepcopy(lst)
μΌλ¨ μ μ μμΌκ°νμ 리μ€νΈλ‘μ¨ λ°κ³ DP κΈ°λ‘μ νκΈ° μν΄ λ¦¬μ€νΈλ₯Ό deepcopy ν΄μ£Όκ² μ΅λλ€.
for i in range(len(dp)-1):
for j in range(len(dp[i])):
κ·Έλ¦¬κ³ μμμλΆν° λ-1 κΉμ§ ν©μ°μ μν΄ λ¦¬μ€νΈλ₯Ό μννκ² μ΅λλ€.
if lst[i+1][j] + dp[i][j] > dp[i+1][j]:
dp[i+1][j] = lst[i+1][j] + dp[i][j]
첫 λ²μ§Έ κ²½μ°λΆν° μ΄ν΄λ³΄κ² μ΅λλ€.
νμ¬ DPμλ λμ¬ μ μλ μ΅λκ°μ΄ κΈ°λ‘λμ΄μλ€κ³ κ°μ ν΄μΌν©λλ€.
λ°λ‘ μλ μλ κ° + νμ¬κΉμ§ κΈ°λ‘λ μ΅λκ° μ΄ λ°λ‘ μλ κΈ°λ‘λ μ΅λκ°λ³΄λ€ ν¬λ€λ©΄
λ°λ‘ μλ κΈ°λ‘λ μ΅λκ° = λ°λ‘ μλ μλ κ° + νμ¬κΉμ§ κΈ°λ‘λ μ΅λκ°μΌλ‘ νκΈ°ν΄μ€μλ€.
if lst[i+1][j+1] + dp[i][j] > dp[i+1][j+1]:
dp[i+1][j+1] = lst[i+1][j+1] + dp[i][j]
νΌλΌλ―Έλλ μ λκ°μ λ°©ν₯μ΄λ―λ‘ μ€λ₯Έμͺ½μ μλ μΈλ±μ€ νλ λ μ½λ©ν΄μ£Όμλ©΄ λ©λλ€.
print(max(dp[-1]))
λ§μ§λ§μΌλ‘ κ°μ₯ μλ« κ°μμ κ°μ₯ ν° κ°μ΄ λμ¬ μ μλ μ΅λ κ²½μ°μ μμ΄λ―λ‘ μΆλ ₯νμλ©΄ λ©λλ€.