백준 문제풀이/Bruteforcing

[C++] 백준 문제풀이 (Bruteforcing) 16198번 에너지 모으기

코딩준우 2023. 7. 1. 00:58

 

 

https://www.acmicpc.net/problem/16198

 

16198번: 에너지 모으기

N개의 에너지 구슬이 일렬로 놓여져 있고, 에너지 구슬을 이용해서 에너지를 모으려고 한다. i번째 에너지 구슬의 무게는 Wi이고, 에너지를 모으는 방법은 다음과 같으며, 반복해서 사용할 수 있

www.acmicpc.net

 

//[C++] 백준 문제풀이 (Bruteforcing)
#include <bits/stdc++.h>


bool used[10];
int balls[10];
int n;

int ret = INT_MIN;

void dfs(int depth, int sum){
    if (depth == n - 2){

        ret = std::max(ret, sum);
        return;
    }

    for (int i = 1; i < n - 1; ++i){
        if (used[i]) continue;
        used[i] = true;
        int left = i - 1;
        int right = i + 1;

        // 사용하지 않은 공 중 선택한 공 기준으로 첫 왼쪽에 있는 것
        while(used[left]){
            --left;
        }
        // 사용하지 않은 공 중 선택한 공 기준으로 첫 오른쪽에 있는 것
        while(used[right]){
            ++right;
        }
        dfs(depth + 1, sum + balls[left] * balls[right]);
        used[i] = false;
    }
}


int main(){
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::cin >> n;
    for (int i = 0; i < n; ++i){
        std::cin >> balls[i];
    }

    dfs(0, 0);

    std::cout << ret << "\n";
    return 0;
}