https://www.acmicpc.net/problem/14888
N<11이므로 완전탐색이 가능하다고 생각했고, 재귀함수에서 현재까지 계산한 값을 받아서 4개의 연산자를 한번씩 덧붙여서 재귀하면 된다.
참고로 결과물(중간결과물 포함)이 다 10만(10^9)이하래서 int로 해결가능하다.
https://www.acmicpc.net/source/23167877
#include<iostream>
#include<math.h>
#include<vector>
using namespace std;
vector<int> nums;
int mmin=pow(10,9), mmax=-pow(10,9);//전체 결과중에서
int counter = 0;
void one_proc(int mom_res, int s, vector<int> yeons,vector<int> tracker) {//s는 연산자가 적용될 인덱스
	counter++;
	if (s == nums.size()) {
		/*
		cout << "계산결과 비교중" << mmin << " , " << mmax << " , " << mom_res << endl;
		for (int i = 0; i < tracker.size(); i++) {
			cout << tracker[i] << " ";
		}
		cout << endl;
		*/
		mmin = min(mmin, mom_res);
		mmax = max(mmax, mom_res);
		return;
	}
	for (int i = 0; i < 4; i++) {
		int res = mom_res;
		if (yeons[i] <= 0) {
			continue;
		}
		yeons[i]--;
		
		if (i == 0) {
			res = res + nums[s];
		}
		else if (i == 1) {
			res = res - nums[s];
		}
		else if (i == 2) {
			res = res * nums[s];
		}
		else if (i == 3) {
			if (res > 0) {
				res = res / nums[s];
			}
			else {
				res = -(abs(res) / nums[s]);
			}
		}
		vector<int> temp_tracker = tracker;
		temp_tracker.push_back(i);
		/*
		cout << "right before dfs" << endl;
		for (int i = 0; i < temp_tracker.size(); i++) {
			cout << temp_tracker[i] << " ";
		}
		cout << " == " << res << endl;
		*/
		one_proc(res, s + 1, yeons,temp_tracker);
		yeons[i]++;//복구
	}
}
int main() {
	int n;
	vector<int> yeons;//4가지 연산자의 개수
	cin >> n;
	int num;
	for (int i = 0; i < n; i++) {
		cin >> num;
		nums.push_back(num);
	}
	for (int i = 0; i < 4; i++) {
		cin >> num;
		yeons.push_back(num);
	}
	vector<int> tracker;
	one_proc(nums[0], 1, yeons,tracker);
	cout << mmax << endl;
	cout << mmin << endl;
}