n,*l=map(int,open(0).read().split())
s=l[::2] # 내구도
w=l[1::2] # 무게
def f(t):
global r
if t==n:
r=max(r,sum(1for e in s if e<1)) # 마지막까지 처리 이후 깨진 계란의 최대값 갱신
return
if s[t]<1:
f(t+1) # 손에 든 계란이 깨졌을 경우 오른쪽 계란으로 이동
else:
k=1 # broKen :모두 다 깨져 있음의 플래그
for i in range(n): # 손에 든 계란
if i!=t and s[i]>0: # 손에 든 계란이 아니고 내구도가 남아 있을 경우
k=0 # 깨지지 않은게 있음
s[t]-=w[i] # 내구도 갱신
s[i]-=w[t] # 내구도 갱신
f(t+1) # 다음 진행
s[t]+=w[i] # 내구도 복원
s[i]+=w[t] # 내구도 복원
if k:f(n) # 모두 다 깨졌으면 마지막 처리로 ...
r=0 #결과값. 최대로 깨진 계란의 수
f(0)
print(r)
'BaekJoon' 카테고리의 다른 글
백준 1038 감소하는 수 (0) | 2024.05.06 |
---|---|
백준 3980 선발 명단 (0) | 2024.05.04 |
백준 2023 신기한 소수 (0) | 2024.05.03 |
백준 15658 연산자 끼워넣기 (2) (0) | 2024.05.01 |
백준 2568 전깃줄 - 2 (0) | 2024.04.28 |