광고
광고
#include <stdio.h> #include <iostream> #include <set> #include <map> #include <queue> #include <vector> #include <string> #include <math.h> #include <algorithm> using namespace std; int N; int dice[7]; long long Min1 = 9999; long long Min2 = 9999; long long Min3 = 9999; int check2[7]; int check3[7]; void Min_1() { for(int i = 1; i <= 6; i++) { if(dice[i] < Min1) { Min1 = dice[i]; } } } void Min_2(long long sum, int idx, int cnt) { if(cnt == 2) { if(sum < Min2) { Min2 = sum; } return; } for(int i = idx; i <= 6; i++) { if(check2[abs(7-i)] == 1) { continue; } check2[i] = 1; Min_2(sum+dice[i], i+1, cnt+1); check2[i] = 0; } } void Min_3(int sum, int idx, int cnt) { if(cnt == 3) { if(sum < Min3) { Min3 = sum; } return; } for(int i = idx; i <= 6; i++) { if(check3[abs(7-i)] == 1) { continue; } check3[i] = 1; Min_3(sum+dice[i], i+1, cnt+1); check3[i] = 0; } } int main(void) { // freopen("B1041_input.txt", "r", stdin); cin >> N; for(int i = 1; i <= 6; i++) { cin >> dice[i]; // (1,6) (2,5) (3,4) 평행 } if(N == 1) { sort(dice+1, dice+7); long long sum = 0; for(int i = 1; i <= 5; i++) { sum += dice[i]; } cout << sum; } else { Min_1(); Min_2(0, 1, 0); Min_3(0, 1, 0); long long Min1_Sum = Min1 * (N-2) * (N-1) * 4 + Min1 * (N-2) * (N-2); long long Min2_Sum = Min2 * (N-1) * 4 + Min2 * (N-2) * 4; long long Min3_Sum = Min3 * 4; cout << Min1_Sum + Min2_Sum + Min3_Sum; } return 0; } | cs |
'Baekjoon > BruteForce' 카테고리의 다른 글
[백준 1018] 체스판 다시 칠하기 (Brute Force) (C/C++) (0) | 2020.03.24 |
---|---|
[백준 1251] 단어 나누기 (조합) (C/C++) (★) (0) | 2020.03.23 |
[백준 15683] 감시 (순열) (C/C++) (★★★) (1) | 2019.11.21 |
[백준 15684] 사다리 조작 (조합) (C/C++) (★★★) (2) | 2019.11.20 |
[백준 15686] 연산자 끼워넣기(2) (순열) (C/C++) (0) | 2019.11.20 |