#include <stdio.h> #include <iostream> using namespace std; int num[15]; int oper[15]; int choice[15]; int visited[15]; int operCnt; int N; int pluss, minuss, multi, divide; long long Max = -1000000005; long long Min = 1000000005; long long cal() { long long val = num[0]; for(int i = 1; i <= N-1; i++) { if(choice[i] == 1) { val += num[i]; } else if(choice[i] == 2) { val -= num[i]; } else if(choice[i] == 3) { val *= num[i]; } else if(choice[i] == 4) { if(val >= 0) { val /= num[i]; } else { int temp = -val; temp /= num[i]; val = -temp; } } } return val; } void permutation(int cnt) { if(cnt == N) { long long val = cal(); if(val > Max) { Max = val; } if(val < Min) { Min = val; } return; } // 연산 중복 제거 int used[5] = {0}; for(int i = 1; i <= operCnt; i++) { if(visited[i] == 0 && used[oper[i]] == 0) { used[oper[i]] = 1; visited[i] = 1; choice[cnt] = oper[i]; permutation(cnt+1); visited[i] = 0; } } } int main(void) { // freopen("B14888_input.txt", "r", stdin); scanf("%d", &N); for(int i = 0; i < N; i++) { scanf("%d", &num[i]); } scanf("%d %d %d %d", &pluss, &minuss, &multi, ÷); // oper에 1(+), 2(-), 3(*), 4(/) 담아줌 -> 이걸로 순열 적용 for(int i = 0; i < pluss; i++) { oper[++operCnt] = 1; } for(int i = 0; i < minuss; i++) { oper[++operCnt] = 2; } for(int i = 0; i < multi; i++) { oper[++operCnt] = 3; } for(int i = 0; i < divide; i++) { oper[++operCnt] = 4; } permutation(1); cout << Max << "\n"; cout << Min << "\n"; return 0; } | cs |
'Baekjoon > BruteForce' 카테고리의 다른 글
[백준 16198] 에너지 모으기 (순열) (C/C++) (★★) (0) | 2019.11.20 |
---|---|
[백준 14502] 연구소 (조합) (C/C++) (★★) (0) | 2019.11.20 |
[백준 14501] 퇴사 (조합) (C/C++) (★) (0) | 2019.11.20 |
[백준 2422] 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (조합) (C/C++) (★) (1) | 2019.11.19 |
[백준 3980] 선발 명단 (순열) (C/C++) (★) (0) | 2019.11.18 |