원리만 파악하면다면 매우 쉽게 해결할 수 있는 문제였다.
# n입력
n = int(input())
# tri 설계
tri = []
# tri 입력
for _ in range(n):
tri.append(list(map(int, input().split())))
# dp 설계
dp = [
[0] * n for _ in range(n)
]
# dp 초기설정
dp[0][0] = tri[0][0]
j = 1
for i in range(1, n):
dp[i][0] = tri[i][0] + dp[i-1][0]
dp[i][j] = tri[i][j] + dp[i-1][j-1]
j += 1
# dp 채워넣기
for i in range(2, n):
for j in range(1, i):
dp[i][j] = tri[i][j] + max(dp[i-1][j-1], dp[i-1][j])
# 출력
print(max(dp[-1]))
'Algorithm(BOJ, Python) > Dynamic Programing' 카테고리의 다른 글
[백준_11057] 오르막 수 python (0) | 2022.07.06 |
---|---|
[백준_9625] BABBA python (0) | 2022.07.06 |
[백준_1003] 피보나치함수 python (0) | 2022.07.05 |
[백준_9461] 파도반 수열 python (0) | 2022.07.05 |
[백준_1912] 연속합 python (0) | 2022.07.05 |