본문 바로가기
알고리즘/BOJ

[Python] 백준 2616번: 소형기관차

by PIAI 2021. 10. 14.

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

 

2616번: 소형기관차

첫째 줄에 기관차가 끌고 가던 객차의 수가 입력된다. 그 수는 50,000 이하이다. 둘째 줄에는 기관차가 끌고 가던 객차에 타고 있는 손님의 수가 1번 객차부터 차례로 입력된다. 한 객차에 타고 있

www.acmicpc.net

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])

댓글