zoukankan      html  css  js  c++  java
  • 洛谷 P2383 狗哥玩木棒

    题目背景

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

    题目描述

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

    输入输出格式

    输入格式:

    输入文件中的第一行是一个整数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
    ");continue;}
            sort(a+1,a+1+m);
            sum/=4;
            dfs(0,1,1);
            if(flag) printf("yes
    ");
            else printf("no
    ");
        }
        return 0;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    地图初步
    多线程技术 初步
    核心动画 CAAnimation 进阶
    CALayer 进阶
    Quartz 2D 初步
    UIView 面面观
    CABasicAnimation 基础
    CGAffineTransform 放射变换解析 即矩阵变换
    RunTime 入门
    对Viewcontroller在UINavigationController中入栈出栈的一点点理解
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7475365.html
Copyright © 2011-2022 走看看