#include<bits/stdc++.h>
using namespace std;
inline int read() {
register int x=0,ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch<='9'&&ch>='0'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
return x;
}
int a[505],b[505],c[505],d[505],f[505][505];
inline int hj(int x){
return x>1e9?-1:x;
}
int main()
{
register int i,j,k,T,n,x,y,z;
cin>>T;
while(T--){
n=read();
for(i=1;i<=n;i++){
a[i]=read()&1;
b[i]=b[i-1]^a[i];
d[i]=d[i-1]+b[i];
}
for(i=1;i<=n;i++) c[i]=read();
memset(f,127,sizeof(f));
f[0][d[n]]=f[1][d[n]]=0;
for(i=2;i<=n;i++){
for(j=0;j<=n;j++) f[i][j]=f[i-1][j];
for(k=1;k<i;k++){
if(a[i]==a[k]) continue;
x=(i-k)-2*(d[i-1]-d[k-1]);
if(x==0) continue;
for(j=max(0,-x);j<=min(n,n-x);j++){
if(f[k-1][j]>1e9) continue;
f[i][j+x]=min(f[i][j+x],f[k-1][j]+c[i]+c[k]);
}
}
/*printf("\n%d:",i);
for(j=0;j<=n;j++)
printf("%d ",f[i][j]<1e9?f[i][j]:-1);*/
}
//cout<<endl;
for(i=0;i<=n;i++)
printf("%d ",f[n][i]<1e9?f[n][i]:-1);
cout<<"\n";
}
return 0;
}
样例第三组也没过