区间dp无果。
#include<bits/stdc++.h>
#define int long long
#define N 305
#define lowbit(x) (x&(-x))
using namespace std;
int T,n,a[N],f[N][N][N];
int dfs(int l,int r,int k){
if(f[l][r][k]!=-1) return f[l][r][k];
if(l>=r) return 0;
f[l][r][k]=0;
for(int p=l;p<r;p++){
if(a[p]==p-k){
f[l][r][k]=max(f[l][r][k],dfs(l,p-1,k)+dfs(p+2,r,k+2)+1);
for(int w=p-1;w>=l;w--){
if(a[w]-k!=w||2*p>r+w-1) break;
f[l][r][k]=max(f[l][r][k],dfs(l,w-1,k)+dfs(2*p+2-w,r,k+2*(p-w+1))+1+p-w);
}
}
}
cout<<l<<" "<<r<<" "<<k<<" "<<f[l][r][k]<<endl;
return f[l][r][k];
}
signed main(){
ios::sync_with_stdio(false);
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=0;i<=2*n;i++){
for(int j=0;j<=2*n;j++){
for(int k=0;k<=2*n;k++)
f[i][j][k]=-1;
}
}
cout<<dfs(1,n,0)<<endl;
}
return 0;
}