Ребят, давайте если вы хотите объяснить идею, то чуть подробнее плиз будете описывать, чтоб не гадать.
dp[i] - длина оптимального сжатия для подстроки 0..i
Скажем, что строка бьется на блоки. Блоки складываются, а сам блок это умножение, возможно на 1.
Как считать: переберем j - длину последнего блока. Тогда мы платим dp[i-j]+1+cost(i-j,i), где cost(l,r) это оптимальное сжатие блока.
Как считать cost(l,r) - вариантов всего 2 - либо берем блок целиком. Либо берем минимальный период и его повторяем требуемое количество раз. Чтобы быстро находить минимальные периоды подстрок, можно на всех ее префиксах предварительно построить Z или Pi-функцию.