Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- #define sz(v) (int)v.size()
- #define ar array
- const int MAXN=4e2+10;
- int n, k, a[MAXN], dp[MAXN][MAXN];
- int rec(int l, int r){
- if (l > r) return 0;
- if (l == r) return 1;
- if (dp[l][r] != -1) return dp[l][r];
- int ans=r-l+1;
- for (int i = l; i < r; i++) ans=min(ans, rec(l, i)+rec(i+1, r));
- int lc=l, rc=r;
- while (a[lc] == a[l]) lc++;
- while (a[rc] == a[l]) rc--;
- if (rc < lc) return dp[l][r] = 1;
- for (int i = 1; i <= min(k, lc-l); i++){
- int nl = l+i, nr = max(rc, r-(k-i));
- ans = min(ans, 1+rec(nl, nr));
- }
- return dp[l][r] = ans;
- }
- int main(){
- cin >> n >> k;
- for (int i = 0; i < n; i++) cin >> a[i];
- memset(dp, -1, sizeof(dp));
- cout << rec(0, n-1) << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement