반응형

www.acmicpc.net/problem/16198

 

16198번: 에너지 모으기

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

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <algorithm>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
int n, arr[11], ans;
bool visited[11];
// idx 양 옆 숫자 선택
int calc(int idx) {
    int ret = 0;
    for (int i = idx - 1; i >= 0; i--) {    // 0 아닌 숫자 나올 때까지 왼쪽으로 이동
        if (arr[i] != 0) {
            ret += arr[i];
            break;
        }
    }
    for (int i = idx + 1; i < n; i++) {        // 0 아닌 숫자 나올 때까지 오른쪽으로 이동
        if (arr[i] != 0) {
            ret *= arr[i];
            break;
        }
    }
    return ret;
}
void bfs(int cnt, int sum) {
    if (cnt == n-1) {
        ans = max(ans, sum);
        return;
    }
    // 0 / 1 ~ n-2 / n-1 선택
    for (int i = 1; i <= n-2; i++) {
        if (!visited[i]) {
            visited[i] = 1;
            int temp = arr[i];
            arr[i] = 0;                    // 선택한 숫자를 0으로 변경
            bfs(cnt+1, sum+calc(i));    // 계산 후에 다음 단계 진행
            arr[i] = temp;
            visited[i] = 0;
        }
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    rep(i, n)
        cin >> arr[i];
    bfs(10);
    cout << ans;
}
cs
반응형

'백준 > 백트래킹' 카테고리의 다른 글

백준 2580  (0) 2021.02.24
N-Queen 복습 (백준 9663)  (0) 2021.02.23
백준 15658  (0) 2021.02.23
백준 1248 [복습 필수]  (0) 2021.02.15
백준 2529  (0) 2021.02.15

+ Recent posts