ALGORITHM
백준 / 16198번 / 에너지 모으기 / C++
chrisysl
2019. 2. 15. 19:06
# 출처 : https://www.acmicpc.net/problem/16198
별다른 어려움 없이 재귀와 백트래킹을 이용한 완전탐색을 통해 문제를 풀었다.
# 풀이
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 | #include <iostream> #include <algorithm> using namespace std; int N, W[10]; bool chk[10]; int func() { int ret = 0; for (int i = 1; i < N - 1; ++i) { if (chk[i]) continue; int left = i - 1; int right = i + 1; while (chk[left]) --left; while (chk[right]) ++right; chk[i] = true; ret = max(ret, func() + W[left] * W[right]); chk[i] = false; } return ret; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N; for (int i = 0; i < N; ++i) cin >> W[i]; cout << func() << '\n'; } | cs |