ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ด์ฝ”ํ…Œ Ch16-33] ํ‡ด์‚ฌ

์€์ง„ 2022. 4. 19. 20:51

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป๋ฌธ์ œ์„ค๋ช…

[์ด์ฝ”ํ…Œ Ch16-33] ํ‡ด์‚ฌ
์ด์ฝ”ํ…Œ

โœ๏ธIdea Sketch

๋ฌธ์ œ์š”์•ฝ

๋‚จ์€ N์ผ ๋™์•ˆ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ƒ๋‹ด์„ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ƒ๋‹ด์„ ์™„๋ฃŒํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ๊ธฐ๊ฐ„ Ti์™€ ์ƒ๋‹ด์„ ํ–ˆ์„ ๋•Œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก Pi๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ํ‡ด์‚ฌ ์ „์— ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ๋‹ด์˜ ์ตœ๋Œ€ ์ด์ต์„ ๊ตฌํ•˜๋ผ.


์‹œ๊ฐ„๋ณต์žก๋„

O(2^n)

๊ฐ ๋‚ ์งœ๋งˆ๋‹ค ์ƒ๋‹ด์„ ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด 2๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•œ๋‹ค. 2 * 2 * 2 * โ€ฆ ์ด n๋ฒˆ ๊ณฑํ•˜๋ฏ€๋กœ 2^n์ด๋‹ค.


์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. DFS๋กœ ์ƒ๋‹ด์„ ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ทธ๋ ‡์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋‘˜ ๋‹ค ํ•จ์ˆ˜ ํ˜ธ์ถœํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •ํ™•ํžˆ ํ‡ด์‚ฌ๋‚ ์งœ์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ, ์ตœ๋Œ€ ์ด์ต์„ ๊ณ„์‚ฐํ•œ๋‹ค.


โœ๏ธ๋‚ด ์†Œ์Šค์ฝ”๋“œ

  • ์ข…๋ฃŒ์กฐ๊ฑด : ์ •ํ™•ํžˆ ํ‡ด์‚ฌ๋‚ ์งœ n์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ, ์ตœ๋Œ€ ์ด์ต์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  • n+1์ผ์งธ ์ดํ›„๋ถ€ํ„ฐ๋Š” ํšŒ์‚ฌ์— ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ๋Œ€ ์ด์ต์„ ๊ตฌํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ depth๊ฐ€ n์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ๋Œ€ ์ด์ต์„ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • depth์˜ ๋‚ ์งœ์— ์ƒ๋‹ด์„ ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‘˜ ๋‹ค dfs ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.


์ „์ฒด ์ฝ”๋“œ

import sys
si = sys.stdin.readline
def dfs(depth, price):
global max_price
if depth == n:
max_price = max(max_price, price)
return
if depth > n:
return
t, p = seq[depth]
dfs(depth + t, price + p)
dfs(depth + 1, price)
if __name__ == "__main__":
n = int(si())
seq = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
max_price = 0
dfs(0, 0)
print(max_price)