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

洛谷 P2383 狗哥玩木棒

时间:2017-09-04 20:18:54      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:blog   ...   点击   turn   for   否则   reg   www.   dig   

题目背景

狗哥又趁着语文课干些无聊的事了...

题目描述

现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢?

输入输出格式

输入格式:

 

输入文件中的第一行是一个整数n表示测试的组数,接下来n行表示每组的测试数据。 每行的第一个数为m(4<=m<=20),接下来m个数ai(1<=ai<=1000)表示木棒的长度。

 

输出格式:

 

对于每组测试数据,如果可以组成正方形输出“yes”,否则输出“no”。

 

输入输出样例

输入样例#1:
3
4 1 1 1 1 
5 10 20 30 40 50 
8 1 7 2 6 4 4 3 5
输出样例#1:
yes
no
yes

说明

狗哥快抓狂了

 

dfs

屠龙宝刀点击就送

#include <algorithm>
#include <cstring>
#include <cctype>
#include <cstdio>
using namespace std;
inline void Read(int &x)
{
    register char ch=getchar();
    for(x=0;!isdigit(ch);ch=getchar());
    for(;isdigit(ch);x=x*10+ch-0,ch=getchar());
}
bool flag,use[21];
int n,m,a[21],sum;
void dfs(int now,int num,int z)
{
    if(flag) return;
    if(num==4&&z==m) {flag=1;return;} 
    for(int i=1;i<=m;++i)
    {
        if(!use[i]&&now+a[i]<=sum)
        {
            use[i]=1;
            (now+a[i])%sum==0?dfs((now+a[i])%sum,num+1,z+1):dfs((now+a[i])%sum,num,z+1);
            use[i]=0;
        }
    }
}
int main()
{
    Read(n);
    for(;n--;)
    {
        sum=0;
        flag=0;
        Read(m);
        for(int i=1;i<=m;++i) Read(a[i]),sum+=a[i];
        if(sum%4) {printf("no\n");continue;}
        sort(a+1,a+1+m);
        sum/=4;
        dfs(0,1,1);
        if(flag) printf("yes\n");
        else printf("no\n");
    }
    return 0;
}

 

洛谷 P2383 狗哥玩木棒

标签:blog   ...   点击   turn   for   否则   reg   www.   dig   

原文地址:http://www.cnblogs.com/ruojisun/p/7475365.html

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