码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1518 Square

时间:2015-05-27 19:05:05      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#define max(a, b)(a > b ? a : b)
#define N 30

int a[N], vis[N], n, k, f;

void DFS(int s, int m, int d)//s为搜索起点 m为已组成的正方体的边数 d当前组成木棍的长度(正方体的一条边可由多个木棍组成)
{
    int i;
    if(m == 4)
    {
        f = 1;
        return ;
    }
    if(d == k)
        DFS(0, m + 1, 0);
    for(i = s ; i < n ; i++)
    {
        if(!vis[i] && d + a[i] <= k)
        {
            vis[i] = 1;
            DFS(i + 1, m, d + a[i]);
            vis[i] = 0;
            if(f == 1)
                return ;
        }
    }
}
int main()
{
    int t, sum, max, i;
    scanf("%d", &t);
    while(t--)
    {
        sum = f = max = 0;
        scanf("%d", &n);
        for(i = 0 ; i < n ; i++)
        {
            scanf("%d", &a[i]);
            sum += a[i];
            max = max(max, a[i]);
        }
        if(sum % 4 != 0 || max > sum / 4 || n < 4)//正方体的边数为小数,长度最大的木棍大于正方体的边数。木棍总数小于4都不能组成正方体
            printf("no\n");
        else
        {
            k = sum / 4;
            memset(vis, 0, sizeof(vis));
            DFS(0, 1, 0);
            if(f == 1)
                printf("yes\n");
            else
                printf("no\n");
        }
    }
    return 0;
}

 

HDU1518 Square

标签:

原文地址:http://www.cnblogs.com/qq2424260747/p/4534140.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!