Может ли кто-нибудь помочь мне найти оптимальный алгоритм динамического программирования для этой проблемы
По пути на ужин участники CCC выстраиваются в очередь за вкусным кудрявым картофелем фри. N (1 ≤ N ≤ 100) участников выстроились в колонну, чтобы войти в столовую.
Доктор В., руководитель CCC, в последний момент понял, что программисты просто ненавидят стоять в очереди рядом с программистами, использующими другой язык. К счастью, в CCC разрешены только два языка: Gnold и Helpfile. Кроме того, участники решили, что они войдут в столовую только в том случае, если они входят в группу не менее чем из K (1 ≤ K ≤ 6) участников.
Доктор В решил повторить следующую схему:
* He will find a group of K or more competitors who use the same language standing next to each other in line and send them to dinner.
* The remaining competitors will close the gap, potentially putting similar-language competitors together.
Итак, Доктор Ви записал для вас последовательность участников. Могут ли все участники пообедать? Если да, то какое минимальное количество групп участников можно отправить на ужин? Вход
Первая строка содержит два целых числа N и K. Вторая строка содержит N символов, которые представляют собой последовательность участников в строке (H представляет Helpfile, G представляет Gnold) Выходные данные
Выведите в одной строке единственное число — минимальное количество групп, которые формируются к обеду. Если не все программисты могут пообедать, выведите -1.
trick
— очень бессмысленный тег. - person Felix Kling   schedule 04.03.2011