접근
다이나믹 테이블 정의
- 입력받은 스티커의 리스트가 곧 다이나믹 테이블이 된다.
- i행 j열의 값은
n = j
일 때 i행 j열의 스티커를 떼어내면서 최대로 얻을 수 있는 점수를 말한다.
설명
- 아래와 같은 스티커 배열이 있다고 하자. (안의 값은 점수이다)
- i행 0열
- 다른 스티커를 떼어낼 수 없으므로 자기의 점수가 곧 다이나믹 테이블의 값이 된다.
- 별도로 건드릴 필요가 없다.
- i행 1열
- 자신의 왼쪽(i행 0열)은 떼어낼 수 없게 되므로 대각선에 위치한 다이나믹 테이블 값에 자신의 점수를 더한 값이 최대 값이 된다.
- i행 j열 (
j ≥ 2
)
결론부터 말하면 대각선의 위치한 j-1열, j-2열의 값 중 큰 값에 자신의 점수를 더한 값이 최대값이 된다
왜?
- 주어진 n열까지 다이나믹 테이블을 구한 뒤에, n열의 0행과 1행 중 큰 값이 정답이 된다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
input = sys.stdin.readline
if __name__=="__main__":
T = int(input())
for _ in range(T):
n = int(input())
dy = [list(map(int,input().split())) for _ in range(2)]
for j in range(1, n):
if j == 1:
dy[0][1] += dy[1][0]
dy[1][1] += dy[0][0]
else:
dy[0][j] += max(dy[1][j-1], dy[1][j-2])
dy[1][j] += max(dy[0][j-1], dy[0][j-2])
print(max(dy[0][-1], dy[1][-1]))
This post is licensed under CC BY 4.0 by the author.