import java.util.Scanner; public class Main{ public static void main(String args[]){ Scanner sc=new Scanner(System.in); int T; T=sc.nextInt(); int[][] w=new int[T][]; int[][] m=new int[T][]; int[] sum=new int[T]; int[] n=new int[T]; int lv; for (int i=0;i<T;i++){ n[i]=sc.nextInt(); sum[i]=0; w[i]=new int[n[i]]; for(int j=0;j<n[i];j++){ w[i][j]=sc.nextInt(); sum[i]=sum[i]+w[i][j]; } m[i]=new int[(n[i]+1)*(sum[i]/2+1)]; } for (int i=0;i<T;i++) { //处理分组T(i);每组数量n;物品重量w[i][j];背包m;背包容量c int c=sum[i]/2; for (int j = 0; j < c+1; j++) m[i][j] = 0; //当背包物品为0,可装重量0 for (int k=1;k<=n[i];k++){ m[i][k*(c+1)]=0; //当背包容量为0,可装重量0 for (int j=1;j<=c;j++){ //每次循环背包物品件数不变,列出背包容量增加的最大价值 m[i][k*(c+1)+j]=m[i][(k-1)*(c+1)+j]; //不装入 if(w[i][k-1]<=j&&m[i][(k-1)*(c+1)+j-w[i][k-1]]+w[i][k-1]>m[i][(k-1)*(c+1)+j]) m[i][k*(c+1)+j]=m[i][(k-1)*(c+1)+j-w[i][k-1]]+w[i][k-1]; //装入背包 } } lv=m[i][c]; for (int k=1;k<=n[i];k++){ if (m[i][k*(c+1)+c]>lv) lv=m[i][k*(c+1)+c]; //求解背包最大价值 } System.out.println(sum[i]-2*lv); //差值 } } }