//Link : https://codeforces.com/contest/1253

#include <bits/stdc++.h>
using namespace std;
#define ll long long
/*
#include <limits.h>
INT_MAX
LLONG_MAX
*/
#define N 3050

int vseg[N][N*4],vlazy[N][N*4];

void init(int *seg,int *lazy,int pos,int l,int r) {
  lazy[pos] = 0;
  if(l==r) {
    seg[pos] = -1e9;
    return;
  }
  int mid = (l+r)/2;
  init(seg,lazy,pos*2,l,mid);
  init(seg,lazy,pos*2+1,mid+1,r);
  seg[pos] = max(seg[pos*2],seg[pos*2+1]);
}

void push(int *seg,int *lazy,int pos,int l,int r) {
  if(lazy[pos]!=0) {
    seg[pos] += lazy[pos];
    if(l!=r) {
      lazy[pos*2] += lazy[pos];
      lazy[pos*2+1] += lazy[pos];
    }
    lazy[pos] = 0;
  }
}

void update_range(int *seg,int *lazy,int pos,int l,int r,int ql,int qr,int v) {
  push(seg,lazy,pos,l,r);
  if(r<ql || qr<l) {
    return;
  }
  if(ql<=l && r<=qr) {
    lazy[pos] = v;
    push(seg,lazy,pos,l,r);
    return;
  }
  int mid = (l+r)/2;
  update_range(seg,lazy,pos*2,l,mid,ql,qr,v);
  update_range(seg,lazy,pos*2+1,mid+1,r,ql,qr,v);
  seg[pos] = max(seg[pos*2],seg[pos*2+1]);
}


void update(int *seg,int *lazy,int pos,int l,int r,int ind,int val) {
  push(seg,lazy,pos,l,r);
  if(l==r) {
    seg[pos] = max(seg[pos],val);
    return;
  }
  int mid = (l+r)/2;
  if(ind<=mid)
    update(seg,lazy,pos*2,l,mid,ind,val);
  else
    update(seg,lazy,pos*2+1,mid+1,r,ind,val);

  seg[pos] = max(seg[pos*2],seg[pos*2+1]);
}

int query(int *seg,int *lazy,int pos,int l,int r,int ql,int qr) {
  push(seg,lazy,pos,l,r);
  if(r<ql || qr<l) {
    return -1e9;
  }
  if(ql<=l && r<=qr) {
    return seg[pos];
  }
  int mid = (l+r)/2;
  return max(query(seg,lazy,pos*2,l,mid,ql,qr),query(seg,lazy,pos*2+1,mid+1,r,ql,qr));
}

int a[N];

void solve2() {
  int n;
  scanf("%d ", &n);
  for(int i=1;i<=n;++i) {
    init(vseg[i],vlazy[i], 1,1,n);
  }
  int value = 0;

  for(int i=1;i<=n;++i) {
    scanf("%d ", &a[i]);
  }
  for(int i=n-1;i;--i) {

    if(i+a[i]==n)
      update(vseg[i],vlazy[i],1,1,n,n,n-i-value);

    if(i+a[i]!=n) {
      for(int j=i+1;j<=i+a[i];++j) {
        int r = query(vseg[j],vlazy[j],1,1,n,i+a[i]+1,n) + 1;
        update(vseg[i],vlazy[i],1,1,n,j,r);
      }

      for(int j= i + a[i]+1;j<n;++j) {
        update_range(vseg[j],vlazy[j],1,1,n,1,n,1);
      }
    }
    if(a[i]+i==n) {
      ++value;
    }
  }

  printf("%d\n", n-1-query(vseg[1],vlazy[1],1,1,n,1,n));
}

void solve() {
  int test;
  scanf("%d ", &test);
  while(test--) {
    solve2();
  }
}

int main() {
    //freopen("input.txt","r",stdin);
    solve();
    return 0;
}
