Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2021
348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define mod 998244353
  4. #define rep(i,s) for(ll i=0; i<s ; i++)
  5. #define f(i,a,b) for(ll i(a); i<b ; i++)
  6. #define inf -pow(10,9)
  7. #define MAXN 100000
  8. const ll INF = 1000000000;
  9. const ll N = 3000;
  10. const ll modi = 1000000007;
  11. const ll modi2= 1000000006;
  12. using namespace std;
  13.  
  14. int main(){
  15.     ll n;
  16.     cin >> n;
  17.     ll arr[n];
  18.     rep(i,n){
  19.         cin >> arr[i];
  20.     }
  21.     ll dp[n][n];
  22.     rep(i,n){
  23.         rep(j,n){
  24.             dp[i][j] = 1e18;
  25.         }
  26.     }
  27.     vector<ll> v;
  28.     v.push_back(arr[0]);
  29.     f(i,1,n){
  30.         if(arr[i] == arr[i-1]){
  31.             continue;
  32.         }
  33.         v.push_back(arr[i]);
  34.     }
  35.     rep(i,v.size()){
  36.         for(ll j = i; j>=0; j--){
  37.             if(i==j){
  38.                 dp[i][j] = 1;
  39.             }
  40.             else{
  41.                 if(v[i] == v[j]){
  42.                     dp[i][j] = min(dp[i-1][j], dp[i][j+1]);
  43.                 }
  44.                 else{
  45.                     if(i - j == 1){
  46.                         dp[i][j] = 2;
  47.                         continue;
  48.                     }
  49.                     f(mid,j+1,i){
  50.                         dp[i][j] = min(dp[i][j], dp[mid][j] + dp[i][mid + 1]);
  51.                     }
  52.                     dp[i][j] = min(dp[i][j], 1 + dp[i][j+1]);
  53.                 }
  54.             }
  55.         }
  56.     }
  57.     cout << dp[v.size()-1][0] << endl;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement