Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- const int INF = 1e+9;
- const int NMAX = 1e+5;
- using namespace std;
- int k, n;
- char s[NMAX];
- int dp[26][NMAX];
- int curr_maxx[NMAX];
- int last[26];
- int main () {
- freopen ("input.txt", "r", stdin);
- freopen ("output.txt", "w", stdout);
- scanf("%d%d", &n, &k);
- scanf("%s", s);
- dp[s[0] - 'A'][0] = 0;
- for (int j = 0; j < 26; j++) last[j] = INF;
- last[s[0] - 'A'] = 0;
- for (int i = 1; i < n; i++) {
- int minn = INF;
- for (int j = 0; j < 26; j++) {
- dp[i][j] = INF;
- if (i - last[j] > k || last[j] == INF)
- continue;
- dp[i][j] = curr_maxx[last[j]] + (j != int(s[i] - 'A'));
- minn = min(dp[i][j], minn);
- }
- curr_maxx[i] = minn;
- last[s[i] - 'A'] = i;
- }
- printf("%d", curr_maxx[n - 1]);
- return 0;
- }
- /*
- 10 2
- ABABBCACBC
- */
Advertisement
Add Comment
Please, Sign In to add comment