#include <bits/stdc++.h>
using namespace std;
void Fast();
long long mf(long long x, long long mod);
long long mi(long long x, long long mod);
long long C(long long x, long long y, long long mod);
long long bpow(long long x, long long y, long long mod);
void Fast() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
long long mf(long long x, long long mod = 1000000007) {
  if (x < 2) return 1;
  return (x * mf(x - 1)) % mod;
}
long long mi(long long x, long long mod = 1000000007) {
  return bpow(x, mod - 2, mod);
}
long long C(long long x, long long y, long long mod = 1000000007) {
  if (x < y) return 0;
  return (((mf(x) * mi(mf(y))) % mod) * mi(mf(x - y))) % mod;
}
long long bpow(long long x, long long y, long long mod = 1000000007) {
  x %= mod;
  long long res = 1;
  while (y > 0) {
    if (y & 1) {
      res = res * x % mod;
    }
    x = x * x % mod;
    y >>= 1;
  }
  return res;
}
long long F(long long l, long long r, long long ar[]) {
  long long n = r - l + 1;
  if (n == 0) {
    return 0;
  } else if (n == 1) {
    return (ar[l] != 0);
  }
  long long make_pair = LONG_LONG_MAX;
  for (long long i = l; i < r + 1; i++) {
    make_pair = min(make_pair, ar[i]);
  }
  long long res = make_pair;
  for (long long i = l; i < r + 1; i++) {
    ar[i] -= make_pair;
  }
  long long dl = l;
  for (long long i = l; i < r + 1; i++) {
    if (!ar[i]) {
      res += F(dl, i - 1, ar);
      dl = i + 1;
    }
  }
  res += F(dl, r, ar);
  return min(n, res);
}
int main() {
  Fast();
  long long n;
  cin >> n;
  long long ar[n];
  for (long long i = 0; i < n; i++) {
    cin >> ar[i];
  }
  cout << F(0, n - 1, ar);
}
