Study hard
(c++)백준 16198번: 에너지 모으기 본문
https://www.acmicpc.net/problem/16198
16198번: 에너지 모으기
N개의 에너지 구슬이 일렬로 놓여져 있고, 에너지 구슬을 이용해서 에너지를 모으려고 한다. i번째 에너지 구슬의 무게는 Wi이고, 에너지를 모으는 방법은 다음과 같으며, 반복해서 사용할 수 있�
www.acmicpc.net

[풀이]
모든 경우의 수에 대해 모을 수 있는 에너지 양을 구하는 브루트 포스로 문제를 풀었다.
재귀함수를 이용해 구슬이 3개 남았을 때 1번 구슬의 무게와 3번 구슬의 무게를 곱한 것을 지금까지 축적한 합에 합한 값이 최대값인지 확인한 후 return 해주었다.
#include <iostream>
#include <vector>
using namespace std;
int N;//에너지 구슬의 개수
vector<int> W(10);//에너지 구슬의 무게
int Max = -1;
void getMax(vector<int> curW, int sum) {
int curS = curW.size();//현재 남은 구슬 수
//구슬이 3개 남은 경우
if (curS == 3) {
sum += curW[0] * curW[2];
if (Max < sum)Max = sum;
return;
}
for (int i = 1; i < curS - 1; i++) {
int tmp = curW[i];
sum += curW[i - 1] * curW[i + 1];
vector<int>rW = curW;
rW.erase(rW.begin() + i);
getMax(rW, sum);
sum -= curW[i - 1] * curW[i + 1];
}
}
int main() {
cin >> N;
for (int i = 0; i < N; i++) {
cin >> W[i];
}
getMax(W, 0);
cout << Max << '\n';
return 0;
}
'백준 > 브루트 포스' 카테고리의 다른 글
(c++)백준 1987번: 알파벳 (0) | 2020.08.28 |
---|---|
(c++)백준 14500번: 테트로미노 (0) | 2020.08.25 |
(c++)백준 15658번: 연산자 끼워넣기 (2) (0) | 2020.08.13 |
(c++)백준 14888번: 연산자 끼워넣기 (0) | 2020.08.13 |
(c++)백준 14225번: 부분수열의 합 (0) | 2020.08.11 |