#include #include #include using namespace std; int main() { int n; cin >> n; vector a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } // Precompute the list of s for each i vector> 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 dp(n, 0); vector 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; }