← Home
package main

import (
	"bytes"
	"io"
	"os"
	"strconv"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int {
		for idx < len(data) && (data[idx] == ' ' || data[idx] == '\n' || data[idx] == '\r' || data[idx] == '\t') {
			idx++
		}
		sign := 1
		if idx < len(data) && data[idx] == '-' {
			sign = -1
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return val * sign
	}

	t := nextInt()
	var out bytes.Buffer

	for tc := 0; tc < t; tc++ {
		n := nextInt()
		a := make([]int, n)
		for i := 0; i < n; i++ {
			a[i] = nextInt()
		}

		dp := make([]int, n+1)
		for i := n - 1; i >= 0; i-- {
			best := dp[i+1]
			end := i + a[i]
			if end < n {
				val := a[i] + 1 + dp[end+1]
				if val > best {
					best = val
				}
			}
			dp[i] = best
		}

		out.WriteString(strconv.Itoa(n - dp[0]))
		if tc+1 < t {
			out.WriteByte('\n')
		}
	}

	os.Stdout.Write(out.Bytes())
}