λ°±μ€_14888_μ°μ°μ λΌμλ£κΈ° (λΈλ£¨νΈν¬μ€-μ¬κ·)
π λ¬Έμ : https://www.acmicpc.net/problem/14888
14888λ²: μ°μ°μ λΌμλ£κΈ°
첫째 μ€μ μμ κ°μ N(2 ≤ N ≤ 11)κ° μ£Όμ΄μ§λ€. λμ§Έ μ€μλ A1, A2, ..., ANμ΄ μ£Όμ΄μ§λ€. (1 ≤ Ai ≤ 100) μ μ§Έ μ€μλ ν©μ΄ N-1μΈ 4κ°μ μ μκ° μ£Όμ΄μ§λλ°, μ°¨λ‘λλ‘ λ§μ (+)μ κ°μ, λΊμ (-)μ κ°μ,
www.acmicpc.net
π μκ³ λ¦¬μ¦: λΈλ£¨νΈν¬μ€-μ¬κ·
π idea: μ«μ μ¬μ΄μ κ° μ리μ λν΄ μ΅λ 4κ°μ§ κ²½μ°(+,-,*,/)κ° μμΌλ―λ‘ κ° κ²½μ°μ λν΄ μ¬κ· ν¨μ νΈμΆ. (λ¨, μ°μ°μμ κ°μλ₯Ό νμΈν κ²!)
π μΆκ°λ‘ μ 리ν λ΄μ©:
- make_pair() ν¨μλ utility ν€λμ μ μλμ΄μμΌλ utility ν€λλ <vector>λ <algorithm>μ ν¬ν¨λμ΄μμΌλ―λ‘ λ°λ‘ <utility>λ₯Ό includeν νμλ μλ€.
- for(auto element : array) μ¬μ©λ²
π» μ½λ:
#include <iostream>
#include <vector>
using namespace std;
int N;
vector<int> arr;
pair<int, int> solve(int index, int result, int plus, int minus, int multi, int divide) {
// μ λ΅ λ§λ κ²½μ°
if (index == N) {
return make_pair(result, result);
}
// λ€μ νΈμΆ: κ° μ리μ μ°μ°μκ° +, -, *, / μΈ κ²½μ° κ° 4κ°μ§μ λν΄ νΈμΆ
// μ°μ° κ²°κ³Όλ₯Ό μ μ₯ν λ²‘ν° μμ±
vector<pair<int, int>> res;
if (plus > 0)
res.push_back(solve(index + 1, result + arr[index], plus - 1, minus, multi, divide));
if (minus > 0)
res.push_back(solve(index + 1, result - arr[index], plus, minus - 1, multi, divide));
if (multi > 0)
res.push_back(solve(index + 1, result * arr[index], plus, minus, multi - 1, divide));
if (divide > 0)
res.push_back(solve(index + 1, result / arr[index], plus, minus, multi, divide - 1));
// μ΅λκ°, μ΅μκ° μ°ΎκΈ°
pair<int, int> ans = res[0]; // ans: μ΅λκ°, μ΅μκ°μ pair
for (auto i : res) {
if (ans.first < i.first) ans.first = i.first;
if (ans.second > i.second) ans.second = i.second;
}
return ans;
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> N;
int x;
for (int i = 0; i < N; i++) {
cin >> x;
arr.push_back(x);
}
int plus, minus, multi, divide;
cin >> plus >> minus >> multi >> divide;
auto answer = solve(1, arr[0], plus, minus, multi, divide);
cout << answer.first << '\n' << answer.second << '\n';
return 0;
}