만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

행렬 곱셈 순서 2

시간 제한1초메모리 제한512 MB

요약
행렬 N개의 크기가 주어질 때, 순서를 바꾸지 않고 곱하는 데 필요한 곱셈 횟수의 최솟값을 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

크기가 N×MN \times M인 행렬 AA와 크기가 M×KM \times K인 행렬 BB를 곱하려면 N×M×KN \times M \times K번의 곱셈이 필요하다. NN개의 행렬을 곱하는 데 필요한 곱셈 연산의 수는 행렬을 곱하는 순서에 따라 달라진다.

예를 들어 AA의 크기가 5×35 \times 3, BB의 크기가 3×23 \times 2, CC의 크기가 2×62 \times 6인 경우에 행렬의 곱 ABCABC를 구하는 경우를 생각해 보자.

  • ABAB를 먼저 곱하고 CC를 곱하면 (AB)C(AB)C에 필요한 곱셈 연산의 수는 5×3×2+5×2×6=30+60=905 \times 3 \times 2 + 5 \times 2 \times 6 = 30 + 60 = 90번이다.
  • BCBC를 먼저 곱하고 AA를 곱하면 A(BC)A(BC)에 필요한 곱셈 연산의 수는 3×2×6+5×3×6=36+90=1263 \times 2 \times 6 + 5 \times 3 \times 6 = 36 + 90 = 126번이다.

같은 곱셈이라도 순서에 따라 곱셈 연산의 수가 달라진다.

행렬 NN개의 크기가 주어졌을 때, 모든 행렬을 곱하는 데 필요한 곱셈 연산 횟수의 최솟값을 구하는 프로그램을 작성하시오. 입력으로 주어진 행렬의 순서를 바꾸면 안 된다.

입력

첫째 줄에 행렬의 개수 NN(1≤N≤20,0001 \le N \le 20{,}000)이 주어진다.

둘째 줄부터 NN개 줄에는 행렬의 크기 rr과 cc가 주어진다. (1≤r,c≤10,0001 \le r, c \le 10{,}000)

입력으로는 순서대로 곱셈을 할 수 있는 크기만 주어진다.

출력

첫째 줄에 입력으로 주어진 행렬을 곱하는 데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 263−12^{63}-1보다 작거나 같은 자연수이다. 최악의 순서로 연산해도 연산 횟수는 263−12^{63}-1보다 작거나 같다.

예제1

  1. 예제 1

    입력
    3
    5 3
    3 2
    2 6
    
    예상 출력
    90