https://www.acmicpc.net/problem/16987
1. 코드
def answer_update(arr):
global answer
cnt = 0
for i in arr:
if i[0] <= 0:
cnt += 1
answer = max(answer, cnt)
def dfs(idx, curr_eggs):
if idx == n:
answer_update(curr_eggs)
return
if curr_eggs[idx][0] <= 0:
dfs(idx+1, curr_eggs)
return
flag = False
for target in range(n):
if target == idx:
continue
if curr_eggs[target][0] >= 1:
flag = True
curr_eggs[idx][0] -= curr_eggs[target][1]
curr_eggs[target][0] -= curr_eggs[idx][1]
dfs(idx+1, curr_eggs)
curr_eggs[idx][0] += curr_eggs[target][1]
curr_eggs[target][0] += curr_eggs[idx][1]
if not flag:
answer_update(curr_eggs)
return
n = int(input())
eggs = []
for i in range(n):
s, w = map(int, input().split())
eggs.append([s, w])
answer = 0
dfs(0, eggs)
print(answer)
cnt 파라미터 코드
def dfs(idx, cnt):
global ans
if ans >= cnt+((n-idx)*2):
return
if idx == n:
ans = max(ans, cnt)
return
if eggs[idx][0] <= 0:
dfs(idx+1, cnt)
else:
flag = False
for target in range(n):
if target == idx or eggs[target][0] <= 0:
continue
if eggs[target][0] >= 1:
flag = True
eggs[idx][0] -= eggs[target][1]
eggs[target][0] -= eggs[idx][1]
dfs(idx+1, cnt+int(eggs[idx][0]<=0)+int(eggs[target][0]<=0))
eggs[idx][0] += eggs[target][1]
eggs[target][0] += eggs[idx][1]
if not flag:
ans = max(ans, cnt)
return
ans = 0
n = int(input())
eggs = []
for i in range(n):
s, w = map(int, input().split())
eggs.append([s, w])
dfs(0, 0)
print(ans)