https://www.acmicpc.net/problem/1912
dp문제인데 왼쪽부터 더해주면서 큰수가 나올경우 dp배열에 넣어준다.
import sys
N=int(sys.stdin.readline())
M=list(map(int,sys.stdin.readline().split()))
dp=[0]*N
dp[0]=M[0]
for i in range(1,N):
dp[i]=max(M[i],dp[i-1]+M[i])
print(max(dp))
왼쪽부터 숫자 하나씩 비교하면서 만약 i-1 까지의 누적합의 최대값+ 현재 i의 배열값보다 현재 i의 배열값이 더 크면 현재 i의 배열값을 dp배열에 넣는다.
이 의미는 i-1까지에서 찾은 누적합의 최댓값보다 지금 i의 배열값이 더 크기때문에 i부터 새로운 누적합을 찾겠다는 의미이다.
'알고리즘' 카테고리의 다른 글
백준 20920 (딕셔너리 정렬) (0) | 2022.12.27 |
---|---|
백준 1541번 - split() 함수의 활용 (0) | 2022.06.23 |
분할 정복 예제 ( 괄호를 삽입하는 여러가지 방법) (0) | 2022.05.21 |
분할 정복 (0) | 2022.05.21 |
그리디 알고리즘 예제 (0) | 2022.05.19 |