한 줄로 선 오리

D와 G로 이루어진 문자열에서 길이가 n 이상인 D 묶음이 k개 이상이 되도록 뒤집기 횟수의 최솟값을 구한다.

보통6동적 계획법그리디구현누적 합아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

스리는 오리와 거위, 그리고 마법 지팡이로 게임을 한다. 먼저 스리가 자기 오리를 모두 한 줄로 세우면, 친구 스리니바스가 오리 사이 여러 곳에 거위를 끼워 넣는다. 그다음 스리가 지팡이로 새 일부를 뒤집는다.

지팡이를 한 번 쓰는 것은 다음과 같이 정의한다.

  1. 줄에서 연속한 구간을 하나 고른다.
  2. 그 구간에서 지팡이를 쓰기 전에 오리였던 새는 모두 거위가 된다.
  3. 그 구간에서 지팡이를 쓰기 전에 거위였던 새는 모두 오리가 된다.

스리의 목표는 길이가 nn 이상인 극대 오리 구간을 kk개 이상 만드는 것이다. 극대 오리 구간은 연속한 오리의 나열 중 바로 왼쪽에도 바로 오른쪽에도 오리가 없는 것을 말한다. 예를 들어 DDGGGGDDDGDDDGD에는 길이가 각각 2, 3, 3, 1인 극대 오리 구간이 4개 있다.

게임이 끝났을 때 길이가 nn 미만인 극대 오리 구간이 남아 있어도 된다. 길이가 nn 이상인 극대 오리 구간이 kk개 이상이기만 하면 된다.

스리가 목표를 이루려면 지팡이를 최소 몇 번 써야 하는지 구하여라.

입력

첫째 줄에 두 정수 nnkk가 주어진다 (1n,k20001 \le n, k \le 2000). nn은 스리가 원하는 오리 구간의 최소 길이이고, kk는 원하는 구간의 최소 개수이다.

둘째 줄에 대문자 D와 G로만 이루어진 문자열 ss가 주어진다 (1s20001 \le |s| \le 2000). ss는 스리가 지팡이를 쓰기 전의 새 줄을 나타내고, D는 오리, G는 거위이다.

출력

스리가 목표를 이루는 데 필요한 지팡이 사용 횟수의 최솟값을 한 줄에 출력한다. 목표를 이룰 수 없으면 -1을 출력한다.