본문 바로가기

알고리즘 문제

[C/C++ 백준 16198번] 에너지 모으기 (Silver 1)

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));	
}