Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define mod 998244353
- #define rep(i,s) for(ll i=0; i<s ; i++)
- #define f(i,a,b) for(ll i(a); i<b ; i++)
- #define inf -pow(10,9)
- #define MAXN 100000
- const ll INF = 1000000000;
- const ll N = 3000;
- const ll modi = 1000000007;
- const ll modi2= 1000000006;
- using namespace std;
- int main(){
- ll n;
- cin >> n;
- ll arr[n];
- rep(i,n){
- cin >> arr[i];
- }
- ll dp[n][n];
- rep(i,n){
- rep(j,n){
- dp[i][j] = 1e18;
- }
- }
- vector<ll> v;
- v.push_back(arr[0]);
- f(i,1,n){
- if(arr[i] == arr[i-1]){
- continue;
- }
- v.push_back(arr[i]);
- }
- rep(i,v.size()){
- for(ll j = i; j>=0; j--){
- if(i==j){
- dp[i][j] = 1;
- }
- else{
- if(v[i] == v[j]){
- dp[i][j] = min(dp[i-1][j], dp[i][j+1]);
- }
- else{
- if(i - j == 1){
- dp[i][j] = 2;
- continue;
- }
- f(mid,j+1,i){
- dp[i][j] = min(dp[i][j], dp[mid][j] + dp[i][mid + 1]);
- }
- dp[i][j] = min(dp[i][j], 1 + dp[i][j+1]);
- }
- }
- }
- }
- cout << dp[v.size()-1][0] << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement