Advertisement
Guest User

code

a guest
Jan 15th, 2021
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. #define sz(v) (int)v.size()
  6. #define ar array
  7. const int MAXN=4e2+10;
  8.  
  9. int n, k, a[MAXN], dp[MAXN][MAXN];
  10.  
  11. int rec(int l, int r){
  12.     if (l > r) return 0;
  13.     if (l == r) return 1;
  14.     if (dp[l][r] != -1) return dp[l][r];
  15.  
  16.     int ans=r-l+1;
  17.     for (int i = l; i < r; i++) ans=min(ans, rec(l, i)+rec(i+1, r));
  18.  
  19.     int lc=l, rc=r;
  20.     while (a[lc] == a[l]) lc++;
  21.     while (a[rc] == a[l]) rc--;
  22.  
  23.     if (rc < lc) return dp[l][r] = 1;
  24.     for (int i = 1; i <= min(k, lc-l); i++){
  25.         int nl = l+i, nr = max(rc, r-(k-i));
  26.         ans = min(ans, 1+rec(nl, nr));
  27.     }
  28.  
  29.     return dp[l][r] = ans;
  30. }
  31. int main(){
  32.     cin >> n >> k;
  33.     for (int i = 0; i < n; i++) cin >> a[i];
  34.     memset(dp, -1, sizeof(dp));
  35.  
  36.     cout << rec(0, n-1) << '\n';
  37. }
  38.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement