구간에서 왼쪽과 오른쪽 행렬을 곱할 때 추가되는 비용은 arr[j][0] * arr[k][1] * arr[j+i][1]
이 될 것이다.
이 값과 왼쪽(dp[j][k]
)과 오른쪽(dp[k+1][j+i]
)의 비용을 모두 더하면 된다.
import sys
import math
scan = sys.stdin.readline
def solution():
N = int(scan())
arr = [list(map(int, scan().split())) for _ in range(N)]
dp = [[0 for _ in range(N)] for _ in range(N)]
for i in range(1, N):
for j in range(N - i):
dp[j][j + i] = math.inf
for k in range(j, j + i):
dp[j][j + i] = min(dp[j][j + i], dp[j][k] + dp[k+1][j + i] + arr[j][0] * arr[k][1] * arr[j + i][1])
sys.stdout.write("%d" % dp[0][N-1])
solution()