import sys
input = sys.stdin.readline
def BOJ1912() :
n = int(input())
l = list(map(int, input().split()))
dp = list(l)
for i in range(1, n) :
dp[i] = max(dp[i-1] + l[i], l[i])
print(max(dp))
BOJ1912()
1. 연속된 숫자들의 합중 최댓값을 구하면 된다. 이전 까지의 합을 이용해야 하므로 dp를 적용하였다.
2. 수를 한 개이상 무조건 선택해야 하므로 입력받은 배열을 그대로 dp배열로 넣어주었다.
3. 해당 칸을 선택하거나 선택하지 않는 경우가 있을수 있다. 선택한 경우와 선택하지 않은 경우중 큰 값을 가지고 가게 하였다.
https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
쉬운 계단 수 [백준 10844] - python (0) | 2022.03.07 |
---|---|
포도주 시식[백준 2156] - python (0) | 2022.03.06 |
계단 오르기 [백준 2579] - python (0) | 2022.03.04 |
게임 개발[백준 1516] - python (0) | 2022.03.03 |
작업 [백준 2056] - python (0) | 2022.03.02 |