zoukankan      html  css  js  c++  java
  • HDU1518:Square(DFS)

    Square

    Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
    Total Submission(s) : 88   Accepted Submission(s) : 37

    Font: Times New Roman | Verdana | Georgia

    Font Size: ← →

    Problem Description

    Given a set of sticks of various lengths, is it possible to join them end-to-end to form a square?

    Input

    The first line of input contains N, the number of test cases. Each test case begins with an integer 4 <= M <= 20, the number of sticks. M integers follow; each gives the length of a stick - an integer between 1 and 10,000.

    Output

    For each case, output a line containing "yes" if is is possible to form a square; otherwise output "no".

    Sample Input

    3
    4 1 1 1 1
    5 10 20 30 40 50
    8 1 7 2 6 4 4 3 5
    

    Sample Output

    yes
    no
    yes
    

    Source

    University of Waterloo Local Contest 2002.09.21

    #include <iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int t,i,j,n,m,flag,sum,ans;
    int vis[25],a[25];
    int cmp(int a,int b)
    {
        return a>b;
    }
    void dfs(int k,int l,int edge)
    {
         if(edge==4)
         {
             flag=1;
             return;
         }
      //  if(flag) return;
        for(int i=k;i<=n;i++)
         if (!vis[i])
            if (l+a[i]<=sum)
        {
            vis[i]=1;
            if (l+a[i]==sum)  dfs(1,0,edge+1);
               else dfs(i+1,l+a[i],edge);
            if(flag) return;
            vis[i]=0;
        }
        return;
    }
    int main()
    {
    
        scanf("%d",&t);
        for(;t>0;t--)
        {
            scanf("%d",&n);
            sum=0;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                sum+=a[i];
            }
    
            if (sum%4!=0)
            {
                printf("no\n");
                continue;
            }
    
            sort(a+1,a+1+n,cmp);
            sum=sum/4;
    
            if (a[1]>sum)
            {
                printf("no\n");
                continue;
            }
            memset(vis,0,sizeof(vis));
            flag=0;
            dfs(1,0,1);
            if(flag) printf("yes\n");
              else printf("no\n");
        }
        return 0;
    }
  • 相关阅读:
    spring整合Quartz
    Quartz基本使用
    hibernate框架基础描述
    POI技术实现对excel的导出
    CG-CTF CRYPTO部分wp
    CG-CTF web部分wp
    快速排序算法的c++实现
    tornado当用户输入的URL无效时转入设定的页面
    sicily 4699. 简单哈希
    unbutu下Io language的解释器安装
  • 原文地址:https://www.cnblogs.com/stepping/p/5667545.html
Copyright © 2011-2022 走看看