Top.Mail.Ru

Данная задача является задачей о выборе слов для печати с минимизацией затрат времени на перемещение пальца с клавиши на клавишу.

Алгоритм решения задачи:
1. Создать матрицу dp размером (m+1) x (n+1), где dp[i][j] будет хранить минимальное время, требуемое для печати первых i слов из s1, . . . , si, используя первые j букв латинского алфавита.
2. Заполнить первую строку матрицы dp нулями, так как для печати нулевого слова не требуется времени.
3. Заполнить первый столбец матрицы dp значением бесконечность, так как для печати любого слова требуется хотя бы одна буква.
4. Для каждого слова si из набора s1, . . . , sn и каждой буквы алфавита j от 1 до k, вычислить минимальное время, требуемое для печати первых i слов с использованием первых j букв алфавита.
– Для этого пройти по всем предыдущим состояниям dp[i-1][k] и для каждого состояния найти минимальное значение dp[i-1][k] + ti,j, где ti,j – время переноса пальца с клавиши k на клавишу j.
– В результате выбрать минимальное значение из полученных и записать его в dp[i][j].
5. Найти минимальное время печати первых m слов, выбрав минимальное значение в последней строке матрицы dp.
6. Восстановить оптимальный путь, пройдя по матрице dp от последнего элемента до первого. Для этого начать с последнего элемента dp[m][n] и на каждом шаге выбирать значение dp[i][j] с наименьшим временем и перейти к предыдущему состоянию dp[i-1][k], для которого dp[i][j] было вычислено.
7. Вывести выбранные слова в обратном порядке (если нужно).

Время работы алгоритма составляет O(m * n * k), где m – количество слов для печати, n – количество слов в наборе, k – количество букв в алфавите.

Объем дополнительной памяти, требуемый алгоритмом, составляет O(m * n), так как используется матрица dp размером (m+1) x (n+1).

   
[metform form_id="1136"]