#include <bits/stdc++.h>
using namespace std;
struct Data {
  int l, r, cnt;
  Data(void) {
    l = r = 0;
    cnt = 100000;
  }
  Data(int x) : l(x), r(x), cnt(1) {}
  Data(int _l, int _r, int _cnt) : l(_l), r(_r), cnt(_cnt) {}
  Data operator+(const Data d) {
    if (r == d.l) {
      if (cnt != 1 && d.cnt != 1)
        return Data(l, d.r, cnt + d.cnt - 1);
      else {
        Data ret;
        if (cnt == 1)
          ret.l = l + 1;
        else
          ret.l = l;
        if (d.cnt == 1)
          ret.r = d.r + 1;
        else
          ret.r = d.r;
        ret.cnt = cnt + d.cnt - 1;
        return ret;
      }
    } else
      return Data(l, d.r, cnt + d.cnt);
  }
  bool operator<(const Data d) const { return cnt < d.cnt; }
};
int n, input[500];
Data dp[500][500];
int main(void) {
  scanf("%d", &n);
  int i, j, k;
  for (i = 0; i < n; i++) {
    scanf("%d", &input[i]);
    dp[i][i] = Data(input[i]);
  }
  for (i = 1; i < n; i++) {
    for (j = 0; j + i < n; j++) {
      for (k = j; k + 1 <= j + i; k++) {
        dp[j][j + i] = min(dp[j][j + i], dp[j][k] + dp[k + 1][j + i]);
      }
    }
  }
  printf("%d\n", dp[0][n - 1].cnt);
  return 0;
}
