https://www.acmicpc.net/problem/14888
1.의사코드
2. 전체코드
v: 5 6(i+1)
a: +(i)
#include <bits/stdc++.h>
using namespace std;
int N,p,m,g,na,ret1=-1000000000 -1;
int ret2 = 1000000000+1;
vector<int> v;
//n번째자리, 들어갈연산
void dfs(int n, vector<char> a,int P,int M,int G,int NA) {
if (n == N) {
int sum = v[0];
for (int i = 0; i < N-1; ++i) {
if (a[i] == '+') {
sum += v[i+1];
}
if (a[i] == '-') {
sum -= v[i + 1];
}
if (a[i] == '*') {
sum *= v[i + 1];
}
if (a[i] == '/') {
sum /= v[i + 1];
}
}
ret1 = max(ret1, sum);
ret2 = min(ret2, sum);
return;
}
if (P > p || M > m || G > g || NA > na) return;
//+인경우
a.push_back('+');
dfs(n + 1, a,P+1,M,G,NA);
a.pop_back();
//-인경우
a.push_back('-');
dfs(n + 1, a, P , M+1, G, NA);
a.pop_back();
//*인경우
a.push_back('*');
dfs(n + 1, a, P , M, G+1, NA);
a.pop_back();
// /인경우
a.push_back('/');
dfs(n + 1, a, P, M, G, NA+1);
a.pop_back();
}
int main() {
cin.tie(0);
cin >> N;
for (int i = 0; i < N; ++i) {
int tmp;
cin >> tmp;
v.push_back(tmp);
}
cin >> p >> m >> g >> na;
vector<char> v1;
dfs(0, v1,0,0,0,0);
cout << ret1<<"\n"<<ret2;
return 0;
}
'Algorithm > dfs' 카테고리의 다른 글
[알고리즘] 리트코드 417. Pacific Atlantic Water Flow c++ // dp (0) | 2024.07.04 |
---|---|
리트코드 1325 리프노드지우기 c++ (0) | 2024.05.17 |
백준 14889 스타트와링크 c++ // dfs, 사람기준으로 생각하라. 일단 모든경우의수를 벌려놓고 생각하라 (0) | 2024.03.20 |
백준 2573 빙산 c++ // dfs, 구현, year에 대해 반복문 만들기 (0) | 2024.03.10 |
프로그래머스 소수찾기 c++ // 순열 3P1+3P2+3P3 하는방법, 소수판별함수, dfs (0) | 2023.12.04 |