Advertisement
Guest User

Untitled

a guest
Feb 18th, 2018
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4. #include <set>
  5. #include <unordered_set>
  6. #include <map>
  7. #include <unordered_map>
  8. #include <deque>
  9. #include <algorithm>
  10. #include <math.h>
  11. #include <random>
  12. #define ff first
  13. #define ss second
  14. #define pb push_back
  15. #define mp make_pair
  16. #define int long long
  17. #define double long double
  18. #define Matrix vector<vector<int> >
  19. #define kektor vector
  20. #define pp pair
  21. #define all(x) x.begin(), x.end()
  22.  
  23. using namespace std;
  24.  
  25. typedef long long ll;
  26.  
  27. int RandInt(int min, int max) {
  28. if (max < min) {
  29. swap(min, max);
  30. }
  31. random_device rd;
  32. mt19937 mt(rd());
  33. uniform_int_distribution<int> dist(min, max);
  34. return dist(mt);
  35. }
  36.  
  37. const int maxn = 2e5 + 1, mod = 1e9, N = 100, K = 32;
  38. bool debug = false;
  39. int dp[N][K][K][K][K], n, k1;
  40. string s;
  41.  
  42. void inic() {
  43. for (int i = 0; i < s.size(); ++i) {
  44. for (int j = 0; j <= k1; ++j) {
  45. for (int i1 = 0; i1 <= k1; ++i1) {
  46. for (int j1 = 0; j1 <= k1; ++j1) {
  47. for (int k = 0; k <= k1; ++k) {
  48. dp[i][j][i1][j1][k] = 1e9;
  49. }
  50. }
  51. }
  52. }
  53. }
  54. dp[0][0][0][0][0] = (s[0] != 'c');
  55. if (s[0] == 'c') {
  56. dp[0][1][0][0][0] = 0;
  57. }
  58. for (int i = 1; i < s.size(); ++i) {
  59. for (int j = 0; j <= k1; ++j) {
  60. for (int i1 = 0; i1 <= k1; ++i1) {
  61. for (int j1 = 0; j1 <= k1; ++j1) {
  62. for (int k = 0; k <= k1; ++k) {
  63. dp[i][j][i1][j1][k] = min(dp[i][j][i1][j1][k], dp[i - 1][j][i1][j1][k] + 1);
  64. if (s[i] == 'c') {
  65. if (j - 1 >= 0)
  66. dp[i][j][i1][j1][k] = min(dp[i][j][i1][j1][k], dp[i - 1][j - 1][i1][j1][k]);
  67. }
  68. if (s[i] == 'h') {
  69. if (i1 - j >= 0)
  70. dp[i][j][i1][j1][k] = min(dp[i][j][i1][j1][k], dp[i - 1][j][i1 - j][j1][k]);
  71. }
  72. if (s[i] == 'e') {
  73. if (j1 - i1 >= 0)
  74. dp[i][j][i1][j1][k] = min(dp[i][j][i1][j1][k], dp[i - 1][j][i1][j1 - i1][k]);
  75. }
  76. if (s[i] == 'f') {
  77. if (k - j1 >= 0)
  78. dp[i][j][i1][j1][k] = min(dp[i][j][i1][j1][k], dp[i - 1][j][i1][j1][k - j1]);
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }
  85. int ans = 1e9;
  86. for (int j = 0; j <= k1; ++j) {
  87. for (int i1 = 0; i1 <= k1; ++i1) {
  88. for (int j1 = 0; j1 <= k1; ++j1) {
  89. for (int k = 0; k <= k1; ++k) {
  90. ans = min(ans, dp[s.size() - 1][j][i1][j1][k]);
  91. }
  92. }
  93. }
  94. }
  95. if (ans == 1e9) {
  96. cout << -1 << '\n';
  97. return;
  98. }
  99. cout << ans << '\n';
  100. return;
  101. }
  102.  
  103. void solve() {
  104. int test;
  105. cin >> test;
  106. for (int dd = 0; dd < test; ++dd) {
  107. cin >> n >> k1 >> s;
  108. inic();
  109.  
  110. }
  111. }
  112.  
  113. signed main() {
  114. /*!
  115.  
  116. !*/
  117. cout.precision(10);
  118. cout << fixed;
  119. if (!debug) {
  120. ios_base::sync_with_stdio(false);
  121. cin.tie(0);
  122. cout.tie(0);
  123. }
  124. freopen("TASK.in", "r", stdin);
  125. freopen("TASK.out", "w", stdout);
  126. solve();
  127. return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement