n개의 정수가 순서대로 주어질 때, n−1개의 연산자를 정수 사이에 하나씩 배치한다.
주어진 정수의 순서를 바꿀 수 없으며, 연산자는 덧셈, 뺄셈, 곰셈 이렇게 세 가지 종류가 있다.
연산자 간의 우선 순위를 무시하고 앞에서부터 차례대로 연산한다고 하였을 때, 가능한 식의 최솟값과 최댓값을 출력하는 프로그램.
(입력 및 선언)
(식 계산하기)
(최종 출력)
# 계산하기
def dfs(depth, total, plus, sub, multi):
global MIN, MAX
if depth == n:
MIN = min(MIN, total)
MAX = max(MAX, total)
if plus:
dfs(depth + 1, total + num[depth], plus - 1, sub, multi)
if sub:
dfs(depth + 1, total - num[depth], plus, sub - 1, multi)
if multi:
dfs(depth + 1, total * num[depth], plus, sub, multi - 1)
n = int(input())
num = list(map(int, input().split()))
plus, sub, multi = map(int, input().split())
MIN, MAX = float("INF"), -float("INF")
dfs(1, num[0], plus, sub, multi)
print(MIN, MAX)