#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const long long LINF = 1e18;
vector<int> v;
int get(int l, int r) {
  if (l == r) return 0;
  int mn = *min_element(v.begin() + l, v.begin() + r);
  for (int i = l; i < r; i++) {
    v[i] -= mn;
  }
  int res = 0;
  int start = l;
  for (int i = l; i <= r; i++) {
    if (i == r || v[i] == 0) {
      res += get(start, i);
      start = i + 1;
    }
  }
  return min(r - l, mn + res);
}
int solve() {
  int n;
  cin >> n;
  v.resize(n);
  for (int i = 0; i < n; i++) {
    cin >> v[i];
  }
  cout << get(0, n) << "\n";
  return 0;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
