Guest User

Untitled

a guest
May 8th, 2026
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. #pragma GCC optimize("Ofast")
  2. #pragma GCC optimize("O3")
  3. #pragma GCC optimize("unroll-loops")
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6. #define int long long
  7. #define ld long double
  8. #define pb push_back
  9. #define f first
  10. #define s second
  11. void solve () {
  12. int n, k;
  13. cin >> n >> k;
  14. string s;
  15. cin >> s;
  16. s = '#' + s;
  17. int c[n + 1] = {};
  18. for (int i = 1; i + 2 <= n; ++i) {
  19. if (s[i] != 'a') {
  20. c[i] += ('z' - s[i]) + 1;
  21. }
  22. if (s[i + 1] <= 'b') {
  23. c[i] += ('b' - s[i + 1]);
  24. } else {
  25. c[i] += ('z' - s[i + 1]) + 2;
  26. }
  27. if (s[i + 2] <= 'c') {
  28. c[i] += ('c' - s[i + 2]);
  29. } else {
  30. c[i] += ('z' - s[i + 2]) + 3;
  31. }
  32. }
  33. vector <vector <int>> dp(n + 1, vector <int> (n + 1, 1e18));
  34. for (int i = 0; i <= n; ++i) {
  35. dp[i][0] = 0;
  36. }
  37. for (int i = 1; i + 2 <= n; ++i) {
  38. for (int j = 0; j <= n; ++j) {
  39. dp[i + 2][j] = min(dp[i + 2][j], dp[i + 1][j]);
  40. if (j + 1 <= n) {
  41. dp[i + 2][j + 1] = min(dp[i + 2][j + 1], dp[i - 1][j] + c[i]);
  42. }
  43. }
  44. }
  45. for (int i = n; i >= 0; --i) {
  46. if (dp[n][i] <= k) {
  47. cout << i << endl;
  48. return;
  49. }
  50. }
  51. }
  52. signed main() {
  53. ios_base::sync_with_stdio(0);
  54. cin.tie(0);
  55. cout.tie(0);
  56. int t = 1;
  57. cin >> t;
  58. while (t--) {
  59. solve();
  60. }
  61.  
  62. return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment