https://www.acmicpc.net/problem/2616
1. 각 기관차 갯수마다 최대로 태울수있는 객차의 수를 구한다.
2. 점화식은 dp[i][j] = max(dp[i][j-1], dp[i-1][j-k] + sum(lst[j-k+1:j+1])) 이다.
현재 기관차의 갯수가 만약 2라고 가정할 때 이전까지의 값 dp[2][j-1] 과 dp[1][j-k] + 최대 객차의 수 를 비교한다.
35 | 40 | 50 | 10 | 30 | 45 | 60 | |
1 | 75 | 90 | 90 | 90 | 90 | 105 | |
2 | 75+50+10 | 135 | 90+30+45 | 90+45+60 | |||
3 | 210 | 135+45+60 |
import sys
input = sys.stdin.readline
n = int(input())
lst = [0] + list(map(int, input().split()))
k = int(input())
dp = [[0 for _ in range(n+1)] for _ in range(4)]
for i in range(1, 4):
for j in range(k*i, n+1):
dp[i][j] = max(dp[i][j-1], dp[i-1][j-k] + sum(lst[j-k+1:j+1]))
print(dp[3][n])
'알고리즘 > BOJ' 카테고리의 다른 글
[Python] 백준 2602번: 돌다리 건너기 (0) | 2021.10.14 |
---|---|
[Python] 백준 11058번: 크리보드 (0) | 2021.10.14 |
[Python] 백준 2482번: 색상환 (0) | 2021.10.13 |
[Python] 백준 2688번: 줄어들지 않아 (0) | 2021.10.13 |
[Python] 백준 1958번: LCS 3 (0) | 2021.10.07 |
댓글