#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;
}