(DP) 백준 9465번 스티커

tc = int(input())
for _ in range(tc):
    n = int(input())
    dp = []
    for _ in range(2):
        dp.append(list(map(int, input().split())))
    dp[0][1] += dp[1][0]
    dp[1][1] += dp[0][0]
    
    for i in range(2, n):
        dp[0][i] += max(dp[1][i-1], dp[1][i-2])
        dp[1][i] += max(dp[0][i-1], dp[0][i-2])
    print(max(dp[0][n-1], dp[1][n-1]))

풀지는 못했고 정답코드를 보고 이해가 되었다.
예를들어서
dp[0][3]의 값이 최대가 되려면
dp[1][2]나 dp[1][1]의 값이 최대가 되어야 한다.

index 0 1 2 3 4
0 50 10 + 30 = 40 max(100, 30) + 100 = 200 max(120, 100) + 20 = 140 max(210, 120) + 40 = 250
1 30 50 + 50 = 100 max(40, 50) + 70 = 120 max(200, 40) + 10 = 210 max(140, 200) + 60 = 26
예제 입력 2)

index 0 1 2 3 4 5 6
0 10 30+ 20= 50 max(20, 50) + 10= 60 max(50, 80) + 50= 130 max(80, 110) + 100= 210 .. ..
1 20 40+ 10= 50 max(10, 50) + 30= 80 max(50, 60) + 50= 110 max(60, 130) + 60 = 190 .. ..

좋은 웹페이지 즐겨찾기