#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
// Precompute the list of s for each i
vector<vector<int>> s_list(n);
for (int s = 0; s < n; ++s) {
int i = s + a[s];
if (i < n) {
s_list[i].push_back(s);
}
}
vector<int> dp(n, 0);
vector<int> max_dp(n, 0);
for (int i = 0; i < n; ++i) {
int current_max = 0;
for (int s : s_list[i]) {
// Calculate previous max: if s is 0, prev_max is 0, else max_dp[s-1]
int prev_max = (s > 0) ? max_dp[s - 1] : 0;
int candidate = prev_max + (a[s] + 1);
if (candidate > current_max) {
current_max = candidate;
}
}
dp[i] = current_max;
// Update max_dp
if (i == 0) {
max_dp[i] = dp[i];
} else {
max_dp[i] = max(max_dp[i - 1], dp[i]);
}
}
cout << n - max_dp[n - 1] << endl;
return 0;
}