#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int num[30];
int vist[30];
int T;
int n;
int sum;
int flay;
int len;
int cmp(int x, int y)
{
return x > y;
}
void dfs(int t, int s, int k)
{
if(t == 4)
{
flay = 1;
return;
}
if(s == len)
{
dfs(t+1, 0, 0);
if(flay)
return;
}
for(int i = k; i < n; i++) //i 不需要从 0 开始 因为 第一次从零开始的递归程序 会的到我们要的解,
{
if( vist[i] == 0 && s + num[i] <= len)
{
vist[i] = 1;
dfs(t, s+num[i], i+1);
if(flay)
return;
vist[i] = 0;
}
}
}
int main()
{
scanf("%d", &T);
int maxn = 0;
while(T--)
{
scanf("%d", &n);
sum = 0;
maxn = 0;
memset(vist, 0, sizeof(vist));
for(int i = 0; i < n; i++) {
scanf("%d", &num[i]);
sum += num[i];
maxn = max(num[i], maxn);
}
if(sum % 4 != 0)
{
printf("no\n");
continue;
}
else if(sum/4 < maxn)
{
printf("no\n");
continue;
}
sort(num, num+n, cmp);
flay = 0;
len = sum/4;
dfs(1, 0, 0);
if(flay)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
hud 1518
最新推荐文章于 2019-05-19 17:38:08 发布