hud 1518

来源:互联网 发布:刘德福中国网络菜市场 编辑:程序博客网 时间:2024/04/30 12:12
#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;}

原创粉丝点击