이 과제는 여러 행렬의 곱에 대해 가장 효율적인 곱셈 순서 를 계산 하는 것입니다.
행렬의 크기는 한 줄의 표준 입력에 지정됩니다. 총 곱셈 비용을 최소화하기 위해 곱셈을 수행하는 순서를 나타내는 정수 목록을 표준 출력으로 인쇄해야합니다.
예 1
입력
5x6 6x12 12x100 100x7
산출
3 2 1
입력 행은 공백으로 구분 된 행렬 크기 목록이며, 각 행은 행 수, 그 뒤에 x, 열 수입니다. 예를 들어, 곱하기위한 4 개의 행렬이 있으므로 (총 3 개의 곱셈) 행렬 곱셈은 연관되어 있으므로 순서에 관계없이 수행 할 수 있습니다.
결과는 총 비용을 최소화하기 위해 곱셈을 수행하는 순서 여야합니다. 이것은 다음에 수행 할 곱셈의 인덱스를 나타내는 공백으로 구분 된 정수 목록이어야합니다. N 행렬의 경우이 목록에는 1에서 N-1까지의 숫자가 포함되어야합니다. 예를 들어 1의 출력 3 2 1은 12x100 * 100x7곱셈을 먼저 수행 한 다음 6x12 * 12x7곱셈 (두 번째 행렬에 이전 단계의 결과를 5x6 * 6x7곱한 값)을 곱한 다음 최종 곱셈을 수행해야 함을 의미합니다 .
행렬 곱셈은 항상 호환 가능합니다. 즉, 행렬의 열 수는 후속 행렬의 행 수와 일치합니다. 두 행렬 승산 비용 가정 AxB * BxC이다 A*B*C.
코드는 최대 100 개의 행렬, 각 차원의 최대 999 개의 목록을 처리해야하며 적절한 시간에 처리해야합니다.
예 2
입력
5x10 10x5 5x15 15x5
산출
1 3 2
또는
3 1 2
예 3
입력
22x11 11x78 78x123 123x666 666x35 35x97 97x111 111x20 20x50
산출
2 3 4 5 6 7 8 1
참고 : 검증을 위해 세 가지 예의 총 총 비용은 9114, 750 및 1466344입니다.
최단 코드 승리!