Algorithm

[BOJ] 16987๋ฒˆ ๊ณ„๋ž€์œผ๋กœ ๊ณ„๋ž€์น˜๊ธฐ - Python

lerrybe 2023. 7. 19. 15:47

 

 

๐Ÿฅธ ๋ฌธ์ œ

 

16987๋ฒˆ: ๊ณ„๋ž€์œผ๋กœ ๊ณ„๋ž€์น˜๊ธฐ

์›๋ž˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ธฐ๋ณธ ์†Œ์–‘์€ ํŒ”๊ตฝํ˜€ํŽด๊ธฐ๋ฅผ ๋‹จ ํ•œ ๊ฐœ๋„ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•˜์ง€๋งŒ ์ธ๋ฒ”์ด๋Š” 3๋Œ€ 500์„ ๋„˜๊ธฐ๋Š” ๋ช‡ ์•ˆ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ค‘ ํ•œ ๋ช…์ด๋‹ค. ์ธ๋ฒ”์ด๋Š” BOJ์—์„œ ํ‹€๋ฆฐ ์ œ์ถœ์„ ํ•  ๋•Œ๋งˆ๋‹ค ํ„ฑ

www.acmicpc.net


 

๐Ÿคฉ ํ•ด์„ค ๋ฐ ํ’€์ด

s = []
w = []
mx_cnt = 0
curr_cnt = 0


def solution(a):
    global mx_cnt, curr_cnt
    if a == n:
        mx_cnt = max(mx_cnt, curr_cnt)
        return
    if s[a] <= 0 or curr_cnt == n - 1:
        solution(a + 1)
        return
    for t in range(n):
        if t == a or s[t] <= 0:
            continue
        s[a] -= w[t]
        s[t] -= w[a]
        if s[a] <= 0:
            curr_cnt += 1
        if s[t] <= 0:
            curr_cnt += 1
        solution(a + 1)
        if s[a] <= 0:
            curr_cnt -= 1
        if s[t] <= 0:
            curr_cnt -= 1
        s[a] += w[t]
        s[t] += w[a]


n = int(input())
for i in range(n):
    s_curr, w_curr = map(int, input().split())
    s.append(s_curr)
    w.append(w_curr)

solution(0)
print(mx_cnt)