https://www.acmicpc.net/problem/4097
코드
from sys import stdin
input = stdin.readline
while True:
n = int(input())
if n == 0:
break
p = [int(input()) for _ in range(n)]
ans = 0
dp = [0]*n
for i in range(n):
dp[i] = max(dp[i-1]+p[i], p[i]) # 계속 이어나가기 vs 새로운 시작
print(max(dp))
dp[i]에는 i번째 원소까지 확인했을 때, 마지막 원소(i번째)가 포함된 부분 배열 중 가장 합이 큰 부분 배열의 합이 저장된다. 그러므로 dp[i]에는 계속 이어나갔을 때의 값인 dp[i-1]+p[i]와 i번째 부터 새로 시작했을 때의 값 p[i] 중 더 큰 값을 저장하면 된다.
'문제풀이 > DP' 카테고리의 다른 글
[Python/파이썬] 백준 5569번 출근 경로 (0) | 2024.05.26 |
---|---|
[Python/파이썬] 백준 15990번 1, 2, 3 더하기 5 (0) | 2024.05.23 |
[Python/파이썬] 백준 3372번 보드 점프 (0) | 2024.05.11 |
[Python/파이썬] 백준 16432번 떡장수와 호랑이 (0) | 2024.05.04 |
[Python/파이썬] 백준 14430번 자원 캐기 (2) | 2024.04.27 |