#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <sstream>
#include <iomanip>
#include <queue>
#include <ctime>
using namespace std;
template <class T> void checkmin(T &t,T x){if (x < t) t = x;}
template <class T> void checkmax(T &t,T x){if (x > t) t = x;}
template <class T> void _checkmin(T &t, T x){if (t == -1) t = x; if (t < x) t = x;}
template <class T> void _checkmax(T &t, T x){if (t == -1) t = x; if (x > t) t = x;}
typedef pair <int,int> PII;
typedef pair <double,double> PDD;
typedef long long lld;
#define foreach(it,v) for (__typeof((v).begin()) it = (v).begin();it != (v).end();it++)
#define DEBUG(a) cout << #a" = " << (a) << endl;
#define DEBUGARR(a, n) for (int i = 0; i < (n); i++) { cout << #a"[" << i << "] = " << (a)[i] << endl; }
const int N = 105;
const int INF = 2000000000;
int n;
PII a[N];
int f[N][N][N][2];

int main(){
#ifdef cwj
	freopen("in", "r", stdin);
#endif
	int Tc;
	scanf("%d", &Tc);
	while (Tc--) {
		scanf("%d", &n);
		for (int i = 0; i < n; i++) {
			scanf("%d", &a[i].first);
		}
		for (int i = 0; i < n; i++) {
			scanf("%d", &a[i].second);
		}
		a[n].first = 0;
		a[n].second = 0;
		n++;
		sort(a, a + n);
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++)
				for (int k = 0; k <= n; k++) {
					f[i][j][k][0] = -INF;
					f[i][j][k][1] = -INF;
				}
		int mid = 0;
		while (a[mid].first < 0) mid++;
		for (int k = 0; k <= n; k++) {
			f[mid][mid][k][0] = 0;
			f[mid][mid][k][1] = 0;
		}
		int ans = -INF;
		for (int i = mid; i >= 0; i--) {
			for (int j = mid; j < n; j++) {
				for (int k = 0; k <= n; k++) {
					if (i + 1 < n) {
						checkmax(f[i][j][k][0], f[i + 1][j][k][0] - abs(a[i].first - a[i + 1].first) * k);
						checkmax(f[i][j][k][0], f[i + 1][j][k][1] - abs(a[i].first - a[j].first) * k);
					}
					if (j) {
						checkmax(f[i][j][k][1], f[i][j - 1][k][1] - abs(a[j].first - a[j - 1].first) * k);
						checkmax(f[i][j][k][1], f[i][j - 1][k][0] - abs(a[j].first - a[i].first) * k);
					}
				}
				for (int k = 0; k <= n; k++) {
					checkmax(f[i][j][k][0], f[i][j][k + 1][0] + a[i].second);
					checkmax(f[i][j][k][1], f[i][j][k + 1][1] + a[j].second);
				}
//				for (int k = 0; k <= n; k++) {
//					printf("f %d %d %d %d %d\n", i, j, k, 0, f[i][j][k][0]);
//					printf("f %d %d %d %d %d\n", i, j, k, 1, f[i][j][k][1]);
//				}
			}
		}
		ans = max(f[0][n - 1][0][0], f[0][n - 1][0][1]);
		printf("%d\n", ans);
	}
}

