과정
- 모든 음식 조합에 대해서 신맛과 쓴맛의 차를 구해봐야한다.
- N개의 요리가 있으면, 재료 1개, 2개, 3개, ... N개로 이루어진 수열을 먼저 구해야한다.
- 재료는 중복되면 안됨
- 재료에 순서는 필요 없음
- 구한 조합에 대해서 신맛과 쓴맛의 차를 구한다
import sys
N = int(input())
ingradient = [tuple(map(int, sys.stdin.readline().split())) for _ in range(N)]
# 수열 만들기
result = []
ans = 1e9
# 중복 없이 순열 만들기
def makeNums(goal, level, idx):
# 종료 조건
if level == goal:
# 신맛과 쓴 맛의 차를 구하기
jucy = 1
bitter = 0
for sub in result:
jucy *= sub[0]
bitter += sub[1]
global ans
if ans > abs(jucy - bitter):
ans = abs(jucy - bitter)
return
for i in range(idx, N):
result.append(ingradient[i])
makeNums(goal, level + 1, i + 1)
result.pop()
for i in range(1, N+1):
makeNums(i, 0, 0)
print(ans)