Ця задача полягає в обчисленні найбільш ефективного порядку множення для добутку з кількох матриць.
Розмір матриць задається в одному рядку стандартного вводу. Ви повинні надрукувати на стандартному виході список цілих чисел із зазначенням порядку, в якому потрібно робити множення, щоб мінімізувати загальну вартість множення.
приклад 1
вхід
5x6 6x12 12x100 100x7
вихід
3 2 1
Рядок введення буде розділеним пробілом списком розмірів матриць, кожний з яких - це кількість рядків, а за ними - an 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.
Найкоротший код виграє!