https://www.acmicpc.net/problem/9465
풀이 과정
- 2차원 DP 테이블을 구성한다.
- DP[i][0]: i번째 스티커를 붙이지 않았을 때 최대 점수
- DP[i][1]: i번째 스티커를 윗줄에 붙였을 때 최대 점수
- DP[i][2]: i번째 스티커를 아랫줄에 붙였을 때 최대 점수
- 점화식을 구해준다.
- 예시로 DP[i][0]의 경우는 i번째 스티커를 붙이지 않을 때의 경우이므로 DP[i-1][0], DP[i-1][1], DP[i-1][2]중 최댓값과 같다.
- DP[i][1]이나 DP[i][2]를 구할 때는, 현재 스티커의 점수를 더해서 저장해주어야 한다.
- 테이블을 모두 구성하면 DP 테이블의 맨 마지막 행의 최댓값을 구해서 출력시켜준다.
소스 코드
import sys
input = lambda: sys.stdin.readline().rstrip()
T = int(input())
for _ in range(T):
N = int(input())
scoreA = list(map(int, input().split()))
scoreB = list(map(int, input().split()))
DP = [[0] * 3 for _ in range(N)]
DP[0][0], DP[0][1], DP[0][2] = 0, scoreA[0], scoreB[0]
for i in range(1, N):
DP[i][0] = max(DP[i-1][0], DP[i-1][1], DP[i-1][2])
DP[i][1] = max(DP[i-1][0], DP[i-1][2]) + scoreA[i]
DP[i][2] = max(DP[i-1][0], DP[i-1][1]) + scoreB[i]
print(max(DP[N-1]))
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 2482 ] [ DP ] 색상환 (0) | 2021.12.15 |
---|---|
[ 9376 ] [ BFS ] 탈옥 (0) | 2021.12.13 |
[ 21609 ] [ 구현 ] 상어 중학교 (0) | 2021.12.10 |
[ 2933 ] [ 구현 ] 미네랄 (0) | 2021.12.09 |
[ 3151 ] [ 이진 탐색 ] 합이 0 (0) | 2021.12.01 |