๐ฉ๐ปโ๐ป๋ฌธ์ ์ค๋ช
โ๏ธ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)