흰 스타렉스에서 내가 내리지

[BOJ] (DF) 13398번 연속합2 본문

Problem Solving

[BOJ] (DF) 13398번 연속합2

주씨. 2022. 3. 8. 17:49
728x90

 

수를 하나 제외했을 경우, 제외하지 않았을 경우의 dp배열을 두개 만들고, 두 배열 중 가장 큰 값을 고르면 된다.

import sys
input = sys.stdin.readline

n = int(input())
arr = list(map(int, input().rstrip().split()))
dp = [a for a in arr]   # 하나도 빼지 않았을 경우
dp2 = [a for a in arr]  # 하나를 뺸 경우

for i in range(1, n):
    dp[i] = max(dp[i], dp[i-1]+arr[i])
    dp2[i] = dp[i]
        
    if i-2 >= 0 and dp[i] < dp[i-2] + arr[i]: # arr[i-1]을 제외한 경우가 합이 더 크게 나오는 경우
        dp2[i] = dp[i-2] + arr[i]   
    
    dp2[i] = max(dp2[i], dp2[i-1] + arr[i])
    
print(max(max(dp), max(dp2)))

 

 

https://www.acmicpc.net/problem/13398

 

13398번: 연속합 2

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net