N개의 에너지 구슬이 일렬로 놓여져 있고, 에너지 구슬을 이용해서 에너지를 모으려고 한다.
i번째 에너지 구슬의 무게는 Wi이고, 에너지를 모으는 방법은 다음과 같으며, 반복해서 사용할 수 있다.
첫째 줄에 에너지 구슬의 개수 N(3 ≤ N ≤ 10)이 주어진다.
둘째 줄에는 에너지 구슬의 무게 W1, W2, ..., WN을 공백으로 구분해 주어진다. (1 ≤ Wi ≤ 1,000)
첫째 줄에 모을 수 있는 에너지의 최댓값을 출력한다.
4
1 2 3 4
12
5
100 2 1 3 100
10400
7
2 2 7 6 90 5 9
1818
10
1 1 1 1 1 1 1 1 1 1
8
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[] w;
static int n, answer = 0;
static boolean[] used;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
w = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++)
w[i] = Integer.parseInt(st.nextToken());
br.close();
used = new boolean[n];
dfs(0, 0);
System.out.println(answer);
}
static void dfs(int depth, int energy) {
if ((n - depth) == 2) {
answer = answer >= energy ? answer : energy;
return;
}
for (int i = 1; i < n - 1; i++) {
if (!used[i]) {
int before;
for (before = i - 1; before >= 0; before--){
if (!used[before])
break;
}
int after;
for (after = i + 1; after < n; after++) {
if (!used[after])
break;
}
used[i] = true;
dfs(depth + 1, energy + (w[before] * w[after]));
used[i] = false;
}
}
}
}
좋은 글 감사합니다.