Эта задача состоит в том, чтобы вычислить наиболее эффективный порядок умножения для произведения нескольких матриц.
Размер матриц указывается в одной строке стандартного ввода. Вы должны вывести на стандартный вывод список целых чисел, указывающий порядок, в котором нужно умножать, чтобы минимизировать общую стоимость умножения.
пример 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.
Самый короткий код выигрывает!