DP를 사용해 이전의 값 중 가장 큰 값을 누적하며 더해가는 풀이
import sys
input = sys.stdin.readline
n = int(input())
li = [list(map(int,input().split())) for _ in range(n)]
dp = [[0]*(i+1) for i in range(n)]
dp[0] = li[0]
for i in range(1,n):
for j in range(i+1):
if j == 0: dp[i][j] = dp[i-1][j] + li[i][j]
elif j == i: dp[i][j] = dp[i-1][j-1] + li[i][j]
else: dp[i][j] = max(dp[i-1][j] + li[i][j], dp[i-1][j-1] + li[i][j])
print(max(dp[n-1]))
'알고리즘' 카테고리의 다른 글
[백준, 9461번] 파도반 수열 (0) | 2023.08.02 |
---|---|
[백준, 1912번] 연속합 (0) | 2023.08.01 |
[백준, 24416번] 알고리즘 수업 - 피보나치 수 1 (0) | 2023.08.01 |
[백준, 11053번] 가장 긴 증가하는 부분 수열 (0) | 2023.07.31 |
[백준, 2579번] 계단 오르기 (0) | 2023.07.31 |