최적의 행렬 곱셈 순서
면접 대비시간 제한1초메모리 제한128 MB
행렬 사슬의 각 행과 열 크기가 주어질 때, 전체 곱을 계산하는 데 필요한 최소 스칼라 곱셈 횟수를 구한다.
문제
두 행렬 와 가 있을 때, 행렬 곱셈의 표준 정의에 따라 곱 의 각 원소는 다음과 같이 정해진다.
이 곱이 정의되려면 의 열 개수와 의 행 개수가 같아야 한다. 행렬 의 행 개수와 열 개수를 각각 , 로 표기하자. 결과 행렬 는 와 같은 수의 행, 와 같은 수의 열을 가지며, 전체를 계산하는 데 필요한 스칼라 곱셈의 횟수는
이다. 예를 들어 가 행렬이고 가 행렬이면, 를 구하는 데 번의 곱셈이 필요하다.
세 개 이상의 행렬을 곱할 때에는 계산 순서를 선택할 수 있다. 예컨대 세 행렬 의 곱 는 로 계산할 수도 있고 로 계산할 수도 있다. 가 , 가 , 가 행렬일 때 두 방식에 필요한 곱셈 횟수를 비교하면 다음과 같다.
이처럼 계산 순서에 따라 필요한 곱셈 횟수가 달라진다. 곱해야 할 행렬들의 크기가 순서대로 주어질 때, 필요한 스칼라 곱셈 횟수가 최소가 되도록 계산 순서를 택했을 때의 그 최소 곱셈 횟수를 구하여라.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 곱할 행렬의 개수를 나타내는 정수 으로 시작하고, 이어서 개의 정수 쌍이 주어진다. 각 쌍은 한 행렬의 행 개수와 열 개수를 나타내며, 주어지는 순서는 행렬을 곱하는 순서와 같다. 은 을 넘지 않는다. 이 이면 입력의 끝을 의미한다. 인접한 두 행렬은 항상 곱셈이 가능하도록 크기가 맞추어져 주어진다.
출력
각 테스트 케이스마다, 모든 행렬을 곱하는 데 필요한 스칼라 곱셈 횟수의 최솟값을 한 줄에 출력한다. 각 줄 앞에는 Case X: 형식으로 케이스 번호를 붙이며, 번호는 부터 차례대로 매긴다.