Divisão Fair

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class Solution
{
    public static void Main()
    {
        var t = Convert.ToInt32(Console.ReadLine());
        while (t-- > 0)
        {
            Solve();
        }
    }
    public static void Solve()
    {
        var N = Convert.ToInt32(Console.ReadLine());
        var list = Console.ReadLine().Trim().Split(' ').Select(x => Convert.ToInt64(x)).ToList();
        var sum = list.Sum();

        if(sum%2!=0)
        {
            System.Console.WriteLine("NO");
        }
        else
        {
            var t =DP(list,sum/2,N);
            if(t)
            {
                System.Console.WriteLine("YES");
            }
            else
            {
                System.Console.WriteLine("NO");
            }
        }
    }
    public static bool DP(List<long> ls, long w, int n)
    {
        var arr = new bool[w+1,n+1];

        for (int i = 0; i < n; i++) 
            arr[0,i]=true; 
      
        for (int i = 1; i < w; i++) 
            arr[i,0]=false; 

        for (int i = 1; i <= w; i++) 
        {
            for (int j = 1; j <= n; j++) 
            {
                arr[i,j] = arr[i,j-1];
              
                if (i >= ls[j - 1]) 
                  arr[i,j] = arr[i,j] || arr[i - ls[j - 1], j - 1];
            }
        }
        return arr[w,n];
    }
  // TLE on third test case;
    public static bool Knapsack(List<long> ls, long w, int n)
    {
        if(w==0) return true; 
        if(w<0) return false; 
        if(n<=0) return false; 
        else return Knapsack(ls,w-ls[n-1],n-1)|| Knapsack(ls,w,n-1);
    }
}
PrashantUnity