[๋ฐฑ์ค€] ํ‡ด์‚ฌ

[๋ฐฑ์ค€] ํ‡ด์‚ฌ_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)

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: