Динамическое программирование
Рекуррентное соотношение
dpi,j={max(i,j)  если i=0 или j=0dpi1,j1  если ai=bj1+min(dpi1,j,  dpi,j1,  dpi1,j1)  иначе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] · Базовый случай: пустые префиксы