dp[i]dp[i]dp[i]를 "iii번 원소로 끝나는 부분 배열의 최대 합"이라 하면, 앞을 이어 붙일지 여기서 새로 시작할지 둘 중 큰 쪽이다.
dp[i]=max(Ai, dp[i−1]+Ai)dp[i] = \max(A_i, \; dp[i-1] + A_i)dp[i]=max(Ai,dp[i−1]+Ai)
답은 모든 dp[i]dp[i]dp[i] 중 최댓값이다. 변수 하나로 굴리면 O(N)O(N)O(N), 메모리 O(1)O(1)O(1).
입력: 9 -2 1 -3 4 -1 2 1 -5 4 출력: 6