https://www.acmicpc.net/problem/9465
9465๋ฒ: ์คํฐ์ปค
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ n (1 ≤ n ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ๋ ์ค์๋ n๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๊ฐ ์ ์๋ ๊ทธ ์์น์ ํด๋นํ๋ ์คํฐ์ปค์
www.acmicpc.net
๋ฌธ์
์๊ทผ์ด์ ์ฌ๋์ ์๋ฅ์ด๋ ๋ฌธ๋ฐฉ๊ตฌ์์ ์คํฐ์ปค 2n๊ฐ๋ฅผ ๊ตฌ๋งคํ๋ค. ์คํฐ์ปค๋ ๊ทธ๋ฆผ (a)์ ๊ฐ์ด 2ํ n์ด๋ก ๋ฐฐ์น๋์ด ์๋ค. ์๋ฅ์ด๋ ์คํฐ์ปค๋ฅผ ์ด์ฉํด ์ฑ ์์ ๊พธ๋ฏธ๋ ค๊ณ ํ๋ค.
์๋ฅ์ด๊ฐ ๊ตฌ๋งคํ ์คํฐ์ปค์ ํ์ง์ ๋งค์ฐ ์ข์ง ์๋ค. ์คํฐ์ปค ํ ์ฅ์ ๋ผ๋ฉด, ๊ทธ ์คํฐ์ปค์ ๋ณ์ ๊ณต์ ํ๋ ์คํฐ์ปค๋ ๋ชจ๋ ์ฐข์ด์ ธ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ์ฆ, ๋ ์คํฐ์ปค์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์, ์๋์ ์๋ ์คํฐ์ปค๋ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.

๋ชจ๋ ์คํฐ์ปค๋ฅผ ๋ถ์ผ ์ ์๊ฒ๋ ์๋ฅ์ด๋ ๊ฐ ์คํฐ์ปค์ ์ ์๋ฅผ ๋งค๊ธฐ๊ณ , ์ ์์ ํฉ์ด ์ต๋๊ฐ ๋๊ฒ ์คํฐ์ปค๋ฅผ ๋ผ์ด๋ด๋ ค๊ณ ํ๋ค. ๋จผ์ , ๊ทธ๋ฆผ (b)์ ๊ฐ์ด ๊ฐ ์คํฐ์ปค์ ์ ์๋ฅผ ๋งค๊ฒผ๋ค. ์๋ฅ์ด๊ฐ ๋ ์ ์๋ ์คํฐ์ปค์ ์ ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์ฆ, 2n๊ฐ์ ์คํฐ์ปค ์ค์์ ์ ์์ ํฉ์ด ์ต๋๊ฐ ๋๋ฉด์ ์๋ก ๋ณ์ ๊ณต์ ํ์ง ์๋ ์คํฐ์ปค ์งํฉ์ ๊ตฌํด์ผ ํ๋ค.
์์ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ์ ์ ์๊ฐ 50, 50, 100, 60์ธ ์คํฐ์ปค๋ฅผ ๊ณ ๋ฅด๋ฉด, ์ ์๋ 260์ด ๋๊ณ ์ด ๊ฒ์ด ์ต๋ ์ ์์ด๋ค. ๊ฐ์ฅ ๋์ ์ ์๋ฅผ ๊ฐ์ง๋ ๋ ์คํฐ์ปค (100๊ณผ 70)์ ๋ณ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์, ๋์์ ๋ ์ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ n (1 ≤ n ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ๋ ์ค์๋ n๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๊ฐ ์ ์๋ ๊ทธ ์์น์ ํด๋นํ๋ ์คํฐ์ปค์ ์ ์์ด๋ค. ์ฐ์ํ๋ ๋ ์ ์ ์ฌ์ด์๋ ๋น ์นธ์ด ํ๋ ์๋ค. ์ ์๋ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค ๋ง๋ค, 2n๊ฐ์ ์คํฐ์ปค ์ค์์ ๋ ๋ณ์ ๊ณต์ ํ์ง ์๋ ์คํฐ์ปค ์ ์์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.

๋ฌธ์ ํ์ด
- ์ด ๋ฌธ์ ๋.. ํ์ฐธ์ ๊ณ ๋ฏผํด๋ณด๋ค ๊ฒฐ๊ตญ ํ์ง ๋ชปํ๊ณ ์ธํฐ๋ท์ ๊ฒ์ํด์ ํผ ๋ฌธ์ ๋ค ใ ใ ..
- DP๋ฅผ ์ฌ์ฉํด์ ํธ๋ ๋ฌธ์ ์ธ๋ฐ, dp[i][j] ๊ฐ์ด ํด๋น ์์น์์ ์ป์ ์ ์๋ ์ ์์ ์ต๋ ํฉ์ ์๋ฏธํ๋ค.
- 0ํ 0์ด ๋๋ 1ํ 0์ด์ ์ต๋ ํฉ์ ๊ตฌํ๊ธฐ ์ํด์ ๋ฐ๋์ ํฌํจ๋์ด์ผ ํ๋ค.
- ๊ทธ๋์ 0ํ 0์ด์์ ์ถ๋ฐํ๋ ๊ฒฝ์ฐ์, 1ํ 0์ด์์ ์ถ๋ฐํ๋ ๊ฒฝ์ฐ๋ก ๊ตฌ๋ถํด์ dp[0][n-1]๊ณผ dp[1][n-1] ์ค ๋ ํฐ ๊ฐ์ด ๋ต์ด ๋๋ค.
- ๋ฌธ์ ์์ ์ค ์์ ๋ก ์ค๋ช
ํด๋ณด์๋ฉด, ๊ฐ ์์น์์ ์ด์ ๋จ๊ณ์ ๊ฑฐ์น ์ ์๋ ๊ฒฝ์ฐ๋ ๋ ๊ฐ์ง์ด๋ค.
- ์ ๋จ๊ณ ๋๊ฐ์ ๋ฐฉํฅ์์ ์ค๋ ๊ฒฝ์ฐ
- ์ ์ ๋จ๊ณ ๋๊ฐ์ ๋ฐฉํฅ์์ ์ค๋ ๊ฒฝ์ฐ
- ์ด ์ค ์ต๋๊ฐ์ ๊ตฌํ๋ ค๋ฉด ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ์ ์ค ๋ ํฐ ๊ฐ์ ๊ฐ์ง๋ ๊ฐ๊ณผ ํ์ฌ ์์น์ ์ ์๋ฅผ ํฉ์ณ์ dp ๊ฐ์ ๊ฐฑ์ ํด์ค์ผ ํ๋ค.
- dp[0][j]=max(dp[1][j-1], dp[1][j-2])+score[0][j]
- dp[1][j]=max(dp[0][j-1], dp[0][j-2])+score[1][j]
- ๊ทธ๋ฆฌ๊ณ max(dp[0][n-1], dp[1][n-1])์ ๋น๊ตํด์ ์ต๋๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
import sys
t=int(sys.stdin.readline())
for _ in range(t):
n=int(sys.stdin.readline())
score=[list(map(int, sys.stdin.readline().split(' '))) for _ in range(2)]
# dp[i][j] = ํด๋น ์์น์์ ์ป์ ์ ์๋ ์ ์์ ์ต๋ ํฉ
dp=[[0]*(n) for _ in range(2)]
dp[0][0]=score[0][0]
dp[1][0]=score[1][0]
for idx in range(1,n):
# 1๋ฒ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ, ๊ฐ ์์์ ์์ ๋๊ฐ์ ์ผ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๋ง ๊ฐ๋ฅํ๋ค.
if idx==1:
dp[1][idx]=dp[0][0]+score[1][idx]
dp[0][idx]=dp[1][0]+score[0][idx]
continue
# ๊ฐ ์์น์ ์ ์ฅ๋ ์ ์๋ ์ ์์ ์ต๋๊ฐ์ ๊ณ์ฐํ๋ค.
# ๊ฐ ์์น์์ ์ฌ ์ ์๋ ๊ฒฝ์ฐ๋ ๋ ๊ฐ์ง์ด๋ค.
# 1) ๋ฐ๋ก ์ด์ ์ด์ ๋๊ฐ์ ๋ฐฉํฅ์์ ์ค๋ ๊ฒฝ์ฐ
# 2) ๋ ์ด ์ด์ ์ ๋๊ฐ์ ๋ฐฉํฅ์์ ์ค๋ ๊ฒฝ์ฐ
# ๋ ๊ฒฝ์ฐ ์ค ๋ ํฐ dp ๊ฐ์ ๊ฐ์ง๋ ๊ฒฝ์ฐ๋ฅผ ์ ํํ๋ค.
dp[0][idx]=max(dp[1][idx-1], dp[1][idx-2])+score[0][idx]
dp[1][idx]=max(dp[0][idx-1], dp[0][idx-2])+score[1][idx]
# 0ํ 0์ด์์ ์์ํด์ ๋ง์ง๋ง๊น์ง ๋๋ฌํ ๊ฒฝ์ฐ์ 1ํ 0์ด์์ ์์ํด์ ๋ง์ง๋ง๊น์ง ๋๋ฌํ ๊ฒฝ์ฐ๋ฅผ ๋น๊ตํด์ ๋ ํฐ ๊ฐ์ ์ถ๋ ฅํ๋ค.
print(max(dp[0][n-1], dp[1][n-1]))
'์๊ณ ๋ฆฌ์ฆ > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1106 ๐ฅ] ํธํ (1) | 2023.11.04 |
---|---|
[๋ฐฑ์ค 11660 ๐ฅ] ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (1) | 2023.11.04 |
[๋ฐฑ์ค 2156 ๐ฅ] ํฌ๋์ฃผ ์์ (0) | 2023.11.04 |
[๋ฐฑ์ค 1890 ๐ฅ] ์ ํ (1) | 2023.11.04 |
[๋ฐฑ์ค 17626 ๐ฅ] Four Squares (1) | 2023.11.02 |