[๋ฐฑ์ค] ํด์ฌ
[๋ฐฑ์ค] ํด์ฌ_14501
ํด์ฌ
ํ์ด
๊ฐ๊ฐ ์ด๋ค ๋ ์ ์๋ดํ๋๋์ ๋ฐ๋ผ ์ต๋ ๊ธ์ก์ด ๋ฌ๋ผ์ง๋ฏ๋ก ๋ชจ๋ ํ์ํ์ฌ ์ต๋ ๊ธ์ก์ ์ฐพ๋๋ค.
์๊ฐํด์ผํ ์ .
1) ํด์ฌ ์ ๊น์ง ์๋ด๋ฐ์์ ๋, ์ต๋ ๊ธ์ก
2) ํ๋์ฉ dfs ์ด์ฉํด์ ์ต๋ ์๋ด ๊ธ์ก result์ ์ ์ฅ
3) ๋ง์ง๋ง ์ผ์ t=1์ผ ๊ฒฝ์ฐ๋ ๊ฐ๋ฅ
์๊ฐํ ๋ ๋งํ๋ ๋ถ๋ถ
1) list์์ index๋ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์ค์ ๊ฐ๊ณผ index๊ฐ ๋ค๋ฅด๋ค. ์ด๊ฒ ๋๋ฌธ์ ๊ณ์ ํท๊ฐ๋ ธ๋ ๊ฒ ๊ฐ๋ค. -> ์ค์ ๋ชจ๋ ๊ฐ์์ -1๋งํผ ํด์ฃผ๊ณ ์๊ฐํด์ผํ ๊ฒ ๊ฐ๋ค.
2) ์ฌ๋ผ์ด์ฑ ์ด์ฉํด์ dfs๋ฅผ ๋๋ ธ๋ ๋ฐ, T๋ฅผ ๋ฃ์ด์ฃผ๋ฉด์ ํ์ฌ index ๋ฒ์๊ฐ ๋ฐ๋์ด์ ํท๊ฐ๋ ค์ก๋ค.
3) idx+t๋ฅผ ํ์ ๋, ๊ทธ ๋ ์ด ํด์ฌ๋ ์ผ ๊ฒฝ์ฐ ํฌํจ์์ผ์ค์ผ ํ๋๊ฐ? ์๋๊ฐ?
-> ํฌํจ์์ผ์ค์ผ ํ๋ค. ์๊ฐํด๋ณด๋ฉด T๋ โ์ค๋๋ถํฐ ์๋ด ๊ฐ๋ฅ์ผโ์ด๊ธฐ ๋๋ฌธ์ ์ค๋ ์๋ด์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์
4) recursion function์ ์ดํดํ๊ฒ ๋๋ฐ, ์ ์ฉ์ํค๋ ค๋๊น ์ ์๋จ
n = int(input())
data = [list(map(int, input().split())) for _ in range(n)]
result = 0
def dfs(idx, ans):
global result
if idx >= n: # ํด์ฌ ๋ ์ผ ๊ฒฝ์ฐ
result = max(result ,ans)
return
for i in range(idx, len(data)):
t, p = data[i]
if t+i >= n+1: # ๋ํ์ ๋, ํด์ฌ ๋ ์ ๋์ด์ค ๊ฒฝ์ฐ
dfs(t+i, ans)
if t+i <= n: # ๋ํ์ ๋, ํด์ฌ ๋ ์ผ ๊ฒฝ์ฐ๊น์ง
dfs(t+i, ans+p)
dfs(0, 0)
print(result)