• HDU 1518 Square


    Square

    Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6187    Accepted Submission(s): 2013

    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
     
    Recommend
    LL
     
    思路:DFS
     
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int map[100];
    int n,m;
    int used[100];
    int sum;
    int side;
    int flag;
    int mmm;
    void DFS(int now,int cnt,int k)
    {
        if(now == side)
        {
            cnt ++;
            now = 0;
            k = 0;
        }
        if(cnt == 4)
        {
            flag = 1;
            return ;
        }
        for(int i = k;i <= m;i ++)
        {
            if(!used[i])
            {
                used[i] = 1;
                if(now + map[i] <= side)
                {
                    DFS(now + map[i],cnt,i + 1);
                    if(flag)
                       return ;
                }
                used[i] = 0;
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        while(n --)
        {
            scanf("%d",&m);
            sum = 0;
            mmm = 0;
            flag = 0;
            for(int i = 1;i <= m;i ++)
            {
                  scanf("%d",&map[i]);
                  if(mmm < map[i])
                      mmm = map[i];
                  sum += map[i];
            }
            if(sum % 4 != 0 || mmm > sum / 4)
            {
                flag = 0;
            }
            else
            {
                side = sum / 4;
                memset(used,0,sizeof(used));
                DFS(0,0,0);
            }
            if(flag == 1)
               printf("yes ");
            else
               printf("no ");
        }
        return 0;
    }
           
           
  • 相关阅读:
    mysql的统计函数(聚合函数)
    mysql中的五子查询
    mysql-蠕虫复制--快速插入数据
    mysql 外键的使用
    我的mysql入门笔记
    阿里云官方 Centos7 源码安装 LAMP环境
    xml格式数据转excel
    mysql的安装配置
    sublime中,怎么把所有的函数代码都折叠起来?
    点击文字或按钮弹出一个DIV窗口(DIV悬浮窗口)
  • 原文地址:https://www.cnblogs.com/GODLIKEING/p/3292730.html
Copyright © 2020-2023  润新知