728x90
반응형
https://www.acmicpc.net/problem/1912
구간의 최대 연속합을 구하는 문제
저장소를 만들어 현재까지의 최대 연속합을 저장해 나가면서 풀면 된다.
여기서 최대 연속합이 되는 경우는 3가지 경우인데
첫번째 경우는 -1 3 처럼 3이 현재값이 최대인경우
두번째는 3 2 처럼 전의 최장합과 바로 앞 원소가 더해져야 최대인 경우
세번째는 -1 2 3 처럼 자기 자신과 그 전 원소가 최대인 경우
이 모든 경우를 저장하며 끝까지 이어나간다음 dp의 최대값을 도출하면 된다.
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-1]+arr[i], arr[i] )
#이전 최장합과 연결, 자신 바로 앞 원소과 연결, 자기 자기자신 이 3가지 경우만 존재
print(max(dp))
완성
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준] 11055번: 가장 큰 증가하는 부분 수열 - python (0) | 2024.04.01 |
---|---|
[백준] 11053번: 가장 긴 증가하는 부분 수열 - python (0) | 2024.03.30 |
[백준] 2193번: 이친수 - python (1) | 2024.03.29 |
[백준] 11000번: 강의실 배정 - python (0) | 2024.03.28 |
[백준] 11050번: 이항 계수 1 - python (0) | 2024.03.28 |