public static int solution(int[][] matrixSizes) {
int length = matrixSizes.length;
int[][] dp = new int[length][length];
for(int i = 0; i < length; i++){
for(int j = 0; j < length; j++){
dp[i][j] = Integer.MAX_VALUE;
}
}
for(int i = 0; i < length; i++){
for(int j = 0; j < length-i; j++){
int a = j;
int b = j+i;
if(a == b) dp[a][b] = 0;
else{
for(int k = a; k < b; k++){
dp[a][b] = Math.min(dp[a][b], dp[a][k] + dp[k+1][b] + matrixSizes[a][0] * matrixSizes[k][1] * matrixSizes[b][1]);
}
}
}
}
return dp[0][length-1];
}
행렬의 최적 곱셈 방법을 찾기 위해서 먼저 dp행렬에 큰 값을 넣어주고 점화식에 따라 최솟값을 찾아줌
dp[a][b], dp[a][k] + dp[k+1][b] + matrixSizes[a][0] * matrixSizes[k][1] * matrixSizes[b][1]);