문제링크 : https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
풀이과정 :
동적프로그래밍은 몇번을 풀어봐도 점화식 찾아내는것이 쉽지않다.
DP의 다른 유형 문제와 다른 부분이 있어 연속합이라는것이 계속 이어지지 않고,
특정시험에서 값을 비교하여 그 이전까지는 손절(?) 치는 방식이라,
dp[i] = sum(dp[i-1] + lst[i], lst[i]) 즉 이득이 되는곳 까지 끌고가다가 dp[i-1]이
음수가 되는순간 lst[i]로 갈아타는 방식의 점화식이다.
num = int(input())
lst = list(map(int, input().split()))
dp = [lst[0]] + [0]*(num-1)
for i in range(1, num):
dp[i] = max(dp[i-1]+lst[i], lst[i])
print(max(dp))
후기 : dp는 봐도봐도 새롭고 다양한 점화식이 존재하는것 같다.
'Coding > 백준' 카테고리의 다른 글
[백준] 치킨 배달 - 백준 15686 | 골드 V (0) | 2025.04.18 |
---|---|
[백준] 2193 - 이친수 - (python 파이썬) (0) | 2022.02.26 |
[백준] 1697 - 숨바꼭질(BFS) - (python 파이썬) (0) | 2022.02.17 |
[백준] 11576 - Base Conversion - (python 파이썬) (0) | 2022.02.14 |
[백준] 2156 - 포도주 시식(Dynamic programming) - (python 파이썬) (0) | 2022.02.11 |