dev/알고리즘문제풀이
[ 백준 11049번 ] 행렬 곱셈 순서 파이썬
realbro.noh
2021. 9. 1. 16:13
11049번: 행렬 곱셈 순서
첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같
www.acmicpc.net
손글씨로 설명을 대체합니다
논리
점화식
동작 순서 예시
코드
import sys
def minimum_matrix_operation():
# inputs
N = int(sys.stdin.readline())
matrices = [None] * N
for i in range(N):
matrices[i] = list(map(int, sys.stdin.readline().split()))
# table[i][j]: i-th-Matrix * ... * j-th-Matrix 의 최소 연산 횟수
table = [[0] * N for _ in range(N)]
for j in range(1, N):
for i in range(j-1, -1, -1):
candidate = sys.maxsize
for k in range(i, j):
candidate = min(candidate
, matrices[i][0] * matrices[k][1] * matrices[j][1]
+ table[i][k] + table[k+1][j])
table[i][j] = candidate
print(table[0][N-1])
return
minimum_matrix_operation()