๐ ๋ฌธ์ ๋งํฌ
9465๋ฒ: ์คํฐ์ปค
๐ ๋ฌธ์ ์์ฝ
์คํฐ์ปค๊ฐ 2ํ n์ด๋ก ์ฃผ์ด์ง๋ฉฐ, ๊ฐ ์คํฐ์ปค์๋ ์ ์๊ฐ ์๋ค. ์คํฐ์ปค๋ฅผ ํ ์ฅ ๋ผ์์ ๋ ์ํ์ข์ฐ์ ์คํฐ์ปค๋ ์ฐข์ด์ ธ ๋ชป ์ฐ๊ฒ๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด์์ ์คํฐ์ปค์ ๋ผ์์ ๋ ์ต๋ ์ ์๋ฅผ ์๊ณ ์ถ๋ค.
ํ ์คํธ ์ผ์ด์ค์ ๊ฐฏ์ T๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๊ฐ ํ ์คํธ ์ผ์ด์ค ๋ณ๋ก ์ด์ ๊ฐฏ์ n๊ณผ ์คํฐ์ปค์ ์ ์๊ฐ 2์ค์ ๊ฑธ์ณ ์ฃผ์ด์ง๋ค.
๐ฟ ํ์ด ์ค๋ช
์ฒ์์๋ DFS๋ฅผ ํตํ ์์ ํ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ๋ ค๊ณ ํ์ผ๋, ์ฌ๊ทํจ์ ์คํ ์ int ๋งค๊ฐ๋ณ์ ๊ฐ์ด ์๊พธ ๋ฐ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ์ฝ๋๊ฐ ์ค๋ต์ ๋ฑ์ด๋๋ค.
๊ฒฐ๊ตญ ์ ๋ต ์ฝ๋๋ฅผ ํ์ธํ๊ณ , DP ๋ฌธ์ ๋ผ๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋์๋๋ฐ
๊ธฐ์กด์ DFS๋ก ํ์ด์ผ๊ฒ ๋ค๊ณ ๊ฒฐ์ ํ๊ธฐ ์ ์ DP๋ฅผ ๊ณ ๋ คํ์ง ์์๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋์๋ค.
์ด์ ๋ ์ง์ ์ ํ์๋ ๋ฌธ์ ๊ฐ DFS ๋ฌธ์ ์ฌ์ ์ด ๋ฌธ์ ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ ์ ์๊ฒ ๋ค๊ณ ์๊ฐํ์๊ธฐ ๋๋ฌธ์ด๋ค.
์๊ฐ์ด๊ณผ๋ฅผ ๋ ๋์ ์ด ๋ฌธ์ ๋ฅผ DFS๋ก ํ ์ ์๋ ๋ถ์ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค.
DP ๋ฌธ์ ์์ n๋ฒ์งธ ์์๋ ์ฃผ๋ก ๋ค์ ์ค ํ๋์ ์๋ฏธ๋ฅผ ์ง๋๋ค๊ณ ํ๋ค. (์ถ์ฒ)
1. n๋ฒ์งธ๊น์ง ์์๋ฅผ ๊ณ ๋ คํ์์ ๋์ ์ต์ ๊ฐ
2. n๋ฒ์งธ ์์๋ฅผ ์ ํํ์์ ๋์ ์ต์ ๊ฐ
DP ๋ฌธ์ ๋ ํน์ ์์์ ์ต์ ๊ฐ์ ํ์ํ ๋, ํด๋น ์์์ ํ ์นธ ๋ค, ๋ ์นธ ๋ค, ์ด๋ฐ์์ผ๋ก ์ผ์ ํ ์์น ๊ด๊ณ์ ์๋ ์์๋ฅผ ๊ณ ๋ คํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๋ฌธ์ ์์ DP matrix์ ์์๋ฅผ ์ฒซ ๋ฒ์งธ์ ๊ฐ์ด ๊ฐ์ ํ๋ค๋ฉด, ์ต์ ์ ๋จ์ ํ๊ธฐ ์ํด ์ผ์ ํ ์์น ๊ด๊ณ์ ์์๋ฅผ ๊ณ ๋ คํ ์ ์๋ค.
๋ฐ๋ผ์ n๋ฒ์งธ ์์๋ฅผ ์ ํํ์์ ๋์ ์ต์ ๊ฐ์ผ๋ก ๊ฐ์ ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
DP ์์, ์ด๋ค ์์น์ ์์์์ ํ์ฌ ์์๋ฅผ ๋ํด์ผ ์ต์ ๊ฐ์ ๋ณด์ฅํ ์ ์์์ง ํ์ธํด์ผ ํ๋ค.
๋ง๋ฟ์ ์คํฐ์ปค๋ ๋ฌธ์ ์กฐ๊ฑด ์ ๋ฐฐ์ ํ๋ค. (์ค๋ฅธ์ชฝ ์)
ํ์ฌ ์์น๋ฅผ (i, j)๋ผ๊ณ ํ๋ค๋ฉด j-1๋ฒ์งธ ์ด ๋๊ฐ์ ์์น์ ๊ฐ์์ ํ์ฌ ์์น ๊ฐ์ ๋ํ ๊ฒ์ ์ต๋๊ฐ ํ๋ณด๊ฐ ๋ ์ ์๋ค. (์ผ์ชฝ ์)
j-2๋ฒ์งธ ์ด์์ ๊ฐ์ ํ์ ์๋ ๊ฐ์ j-1๋ฒ์งธ ์ด์ ๋๊ฐ์ ์ ๊ฐ์ ์ด๋ฏธ ๋ฐ์์ด ๋๋ฏ๋ก, (์ผ์ชฝ ์๋) ๋ค๋ฅธ ํ์ ์๋ ๊ฐ์์ ๋ค๋ฅธ ํ์ ๊ฐ์ ๋ํ ๊ฒ๋ง์ด ์ต๋๊ฐ ํ๋ณด๊ฐ ๋ ์ ์๋ค. (์ค๋ฅธ์ชฝ ์๋)
์์ ๊ท์น์ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ์๋์ ๊ฐ๋ค.
import sys
input=sys.stdin.readline
T=int(input().rstrip())
for _ in range(T):
N=int(input().rstrip())
stickers=[]
for i in range(2):
line=list(map(int, input().rstrip().split()))
stickers.append(line)
max_score=[[0 for _ in range(N)] for _ in range(2)]
for j in range(N):
for i in range(2):
if j==0:
max_score[i][j]=stickers[i][j]
elif j==1:
max_score[i][j]=max_score[1-i][j-1]+stickers[i][j]
elif j>1:
max_score[i][j]=max(max_score[1-i][j-1]+stickers[i][j], max_score[1-i][j-2]+stickers[i][j])
print(max(max_score[0][N-1], max_score[1][N-1]))
ํ์ ๋ฌธ์ ์์ DP๋ ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ ค๋์ด์ผ ํ ํ์ด ๋ฐฉ๋ฒ