처음에 dp 테이블에
(해당 인덱스 전까지의 최대합 + 현재 값) 과 (현재 값)을 비교해서 해당 인덱스 전까지의 최대 합이 0보다 작다면
현재 인덱스의 값이 최대 합이므로 dp테이블을 현재 인덱스의 값으로 넣어준다.
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
dp = [0] * N
dp[0] = arr[0]
for i in range(1, N):
dp[i] = max(dp[i - 1] + arr[i], arr[i])
print(max(dp))
import sys
input = sys.stdin.readline
N = int(input())
arr = [0]
arr += list(map(int, input().split()))
dp = [0] * (N + 1)
for i in range(1, N + 1):
if dp[i - 1] <= 0:
dp[i] = arr[i]
else:
dp[i] = dp[i - 1] + arr[i]
print(max(dp[1:]))