Algorithms/Dynamic Programming

[DP 알고리즘] 정수 삼각형 S1

잉숭 2021. 7. 25. 10:37

기출 : BOJ #1932

 

n번째 줄 m번째 위치를 고르는 경우 이는 n-1번째 줄의 m-1번째, m번째 위치로부터 내려온다 (확장성)

이를 고려하면 점화식은 다음과 같다

 

D[n][m] = n번째 줄 m번째 숫자를 고르는 경우 최댓값

D[n][m] = max(D[n-1][m-1], D[n-1][m]) + tri[n][m]

 

 

# d[n][m] = max(d[n-1][m-1], d[n-1][m]) + tri[n][m]

n = int(input())
tri = list()
d = [[0 for j in range(i+1)] for i in range(n)]
for _ in range(n):
    tri.append(list(map(int,input().split())))

d[0][0] = tri[0][0]

for i in range(1,n):
    for j in range(i+1):
        if j==0:
            d[i][j] = d[i-1][j] + tri[i][j]
        elif j==i:
            d[i][j] = d[i-1][j-1] + tri[i][j]
        else:
            d[i][j] = max(d[i-1][j-1], d[i-1][j]) + tri[i][j]

print(max(d[n-1]))