처음에 문제 보고 재귀로 돌렸더니 시간 초과 떴다
보통 재귀로 돌려도 되는데 재귀에서 시간 초과 뜨는 문제는 DP로 풀렸었던 경험이 있어서 DP로 노선을 바꿨다.
DP 넘 싫어..
import java.util.*;
class Solution {
public int maxCoins(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int n = nums.length;
int[] values = new int[n + 2];
values[0] = 1;
values[n + 1] = 1;
for (int i = 1; i <= n; i++) {
values[i] = nums[i - 1];
}
n = values.length;
int[][] dp = new int[n][n];
for (int len = 3; len <= n; len++) {
for (int i = 0; i <= n - len; i++) {
int j = len + i - 1;
for (int k = i + 1; k < j; k++) {
dp[i][j] = Math.max(dp[i][j], dp[i][k] + dp[k][j] + values[i] * values[k] * values[j]);
}
}
}
return dp[0][n - 1];
}
}