(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 .. ..
Author And Source
이 문제에 관하여((DP) 백준 9465번 스티커), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jwun95/DP-백준-9465번-스티커저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)