https://www.acmicpc.net/problem/16198
16198번: 에너지 모으기
N개의 에너지 구슬이 일렬로 놓여져 있고, 에너지 구슬을 이용해서 에너지를 모으려고 한다. i번째 에너지 구슬의 무게는 Wi이고, 에너지를 모으는 방법은 다음과 같으며, 반복해서 사용할 수 있�
www.acmicpc.net
백트래킹이라길래 약간 무서웠는데,, 그냥 브루트포스 마냥 모든 경우의 수를 조사하면 된다는 걸 알고(N의 범위가 매우작다. 기껏 연산 다해봐야 10!) 재귀함수를 이용해 모든 경우를 조사했다.
#include <cstdio>
#include <algorithm>
using namespace std;
int func(int array[], int n){
if(n==2)
return 0;
else{
int maxi=-1, energy, newarray[10];
for(int i=1; i<n-1; i++){
energy = array[i-1]*array[i+1];
for(int k=0; k<n; k++)
newarray[k] = array[k];
for(int j=i; j<n; j++)
newarray[j] = newarray[j+1];
maxi = max(maxi, energy + func(newarray, n-1));
}
return maxi;
}
return 0;
}
int main(void){
int N, energy[10];
scanf("%d", &N);
for(int i=0; i<N; i++)
scanf("%d", &energy[i]);
printf("%d",func(energy, N));
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 15649번] N과 M(1) (Silver 3) (0) | 2020.09.04 |
---|---|
[C/C++ 백준 14650번] 걷다보니 신천역 삼 (Small) (Silver 1) (0) | 2020.09.03 |
[C/C++ 백준 11868번] 님 게임 2 (Platinum 4) (0) | 2020.09.01 |
[C/C++ 백준 4811번] 알약 (Gold 5) (0) | 2020.08.31 |
[C/C++ 백준 1756번] 피자 굽기 (Gold 5) (0) | 2020.08.30 |