16198번 - 에너지 모으기
완전탐색을 통해서 쉽게 정답을 구할 수 있다. used 배열을 만들어서 제거한 원소들을 체크한다. 그리고 find 함수에서는 선택된 지점에서 앞
뒤로 탐색하면서 앞의 값과 뒤의 값을 구하고, 그것을 곱한 값을 리턴해준다.
<정답 코드>
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include<iostream> using namespace std; int N; int W[11]; int used[11]; int ans = 0; int find(int n) { int front; int back; for (int i = n - 1; i >= 0; i--) { if (used[i] == 1) continue; front = W[i]; break; } for (int i = n + 1; i <= N-1; i++) { if (used[i] == 1) continue; back = W[i]; break; } return front* back; } void go(int k,int sum) { if (k == N - 2) { if (sum > ans) ans = sum; return; } for (int i = 1; i <= N - 2; i++) { if (used[i] == 0) { used[i] = 1; int value = find(i); go(k + 1, sum + value); used[i] = 0; } } } int main() { ios::sync_with_stdio(false); cin.tie(0); //freopen("input.txt", "r", stdin); cin >> N; for (int i = 0; i < N; i++) cin >> W[i]; go(0,0); cout << ans << endl; return 0; } | cs |
반응형