Salvens

Untitled

Aug 1st, 2023
971
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.28 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3.  
  4. using namespace std;
  5.  
  6. //#define int long long
  7.  
  8. //const long long INF = 1e18 + 7;
  9. const int MAXN = 5000 + 10;
  10. //const int N = 1e5 + 10;
  11.  
  12. //#define int unsigned short int
  13.  
  14. unsigned short int dp[MAXN][MAXN];
  15.  
  16. signed main() {
  17.     ios_base::sync_with_stdio(false);
  18.     cin.tie(nullptr);
  19.     cout.tie(nullptr);
  20.     unsigned short int n, k;
  21.     cin >> n >> k;
  22.     string s;
  23.     cin >> s;
  24.     for (unsigned short int i = 0; i < n - 1; ++i) {
  25.         dp[i][i + 1] = (s[i] == s[i + 1] ? 0 : 1);
  26.     }
  27.     for (unsigned short int len = 2; len < n; ++len) {
  28.         for (unsigned short int l = 0; l + len < n; ++l) {
  29.             unsigned short int r = l + len;
  30.             dp[l][r] = dp[l + 1][r - 1] + (s[l] == s[r] ? 0 : 1);
  31.         }
  32.     }
  33.     for (unsigned short int i = 0; i < n - 1; ++i) {
  34.         dp[i][i] = 1;
  35.         dp[i][i + 1] = (dp[i][i + 1] <= k? 1 : 0) + 2;
  36.     }
  37.     dp[n - 1][n - 1] = 1;
  38.     for (unsigned short int len = 2; len < n; ++len) {
  39.         for (unsigned short int l = 0; l + len < n; ++l) {
  40.             unsigned short int r = l + len;
  41.             unsigned short int val = (dp[l][r] <= k ? 1 : 0);
  42.             dp[l][r] = dp[l + 1][r] + dp[l][r - 1] - dp[l + 1][r - 1] + val;
  43.         }
  44.     }
  45.     cout << dp[0][n - 1] << '\n';
  46. }
Advertisement
Add Comment
Please, Sign In to add comment