Динамическое программирование
Рекуррентное соотношение
dpi,j={max⁡(i,j)  если i=0 или j=0dpi−1, j−1  если ai=bj1+min⁡(dpi−1, j,  dpi, j−1,  dpi−1, j−1)  иначеdp_{i,j} = \begin{cases} \htmlClass{dp-case-active}{\max(i, j) } &\htmlClass{dp-case-active}{ \; \text{если } i = 0 \text{ или } j = 0} \\[2pt] dp_{i-1,\,j-1} & \; \text{если } a_i = b_j \\[2pt] 1 + \min(dp_{i-1,\,j},\; dp_{i,\,j-1},\; dp_{i-1,\,j-1}) & \; \text{иначе} \end{cases}
Выравнивание строк
С
У
Б
Б
О
Т
А
С
О
Б
О
Л
Ь
Таблица ДП
текущаязависимостипуть
СУББОТА \\ СОБОЛЬ
∅СОБОЛЬ
∅0
С
У
Б
Б
О
Т
А
Шаг 1 / 56 — считаем dp[0][0] · Базовый случай: пустые префиксы