深搜
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int num[40];
int s;
int vis[40];
int flag;
int n;
bool dfs(int x,int k,int sum)//木棍序号 已完成变数 当前木棍长度
{
int i;
if(k==3)
return 1;
for(i=x;i<n;i++)
{
if(vis[i]||sum+num[i]>s)
continue;
if(sum+num[i]==s)
{
vis[i]=1;
if(dfs(0,k+1,0))
return 1;
vis[i]=0;
}
else
{
vis[i]=1;
if(dfs(i,k,sum+num[i]))
return 1;
vis[i]=0;
}
}
return 0;
}
int main()
{
int t;
int i;
cin>>t;
while(t--)
{
s=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>num[i];
s+=num[i];
}
if(s%4!=0)
{
cout<<"no"<<endl;
}
else
{
s/=4;
memset(vis,0,sizeof(vis));
if(s<num[0])
{
cout<<"no"<<endl;
}
else
{
if(dfs(0,0,0))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
}
}
}