/*
d[i][j], 记录当前阶段可以得到的差值
*/
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN = 105;
const int VAL = 500*100 + 5;
int d[MAXN][VAL];
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
int T;
scanf("%d", &T);
while(T--) {
int n, v;
scanf("%d", &n);
memset(d, 0, sizeof(d));
d[0][0] = 1;
int sum = 0;
for(int i=1; i<=n; i++) {
scanf("%d", &v);
for(int j=0; j<=sum; j++) if(d[i-1][j]){
d[i][j+v] = 1;
d[i][abs(j-v)] = 1;
}
sum += v;
}
int j;
for(j=0; j<VAL; j++) {
if(d[n][j]) break;
}
printf("%d\n", j);
}
}
/*
参考网上的方法
d[i] 记录其中1人可以取得的钱币数
*/
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN = 105;
const int VAL = 500*100 + 5;
int d[VAL];
int A[MAXN];
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
int T;
scanf("%d", &T);
while(T--) {
int n;
scanf("%d", &n);
int sum = 0;
for(int i=1; i<=n; i++) {
scanf("%d", &A[i]);
sum += A[i];
}
memset(d, 0, sizeof(d));
d[0] = 1;
for(int i=1; i<=n; i++) {
for(int j=sum/2; j>=A[i]; j--) if(d[j-A[i]]){
d[j] = 1;
}
}
int i;
for(i=sum/2; i>=0; i--) {
if(d[i]) break;
}
printf("%d\n", sum-i*2);
}
}