본문 바로가기

BaekJoon

백준 16987 계란으로 계란치기

Image from Copilot AI desinger

 

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)

 

https://www.acmicpc.net/problem/16987

'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