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

    说明

    狗哥快抓狂了

    思路:一个显而易见的搜索。

    #include<cstdio> 
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int m,T;
    int A[25];
    long long sum;
    int cmp(int x,int y){
        return x>y;
    }
    bool dfs(int now,long long a,long long b,long long c,long long d){
        if(now==m+1){ if(a==b&&b==c&&c==d&&a==sum)    return true; }
         if(a>sum||b>sum||c>sum||d>sum)    return false; 
         if(dfs(now+1,a+A[now],b,c,d))    return true; 
         if(dfs(now+1,a,b+A[now],c,d))    return true;
         if(dfs(now+1,a,b,c+A[now],d))    return true;
         if(dfs(now+1,a,b,c,d+A[now]))    return true;
         return false;  
    }
    int main(){
        cin>>T;
         while(T--){
              cin>>m;sum=0;
              for(int i=1;i<=m;i++){ cin>>A[i];sum+=A[i]; }
              if(sum%4){ cout<<"no"<<endl;continue; } 
              else sum/=4;
              sort(A+1,A+1+m,cmp); 
              if(dfs(1,0,0,0,0))    cout<<"yes"<<endl;
              else    cout<<"no"<<endl;         
         }
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    git(重点)
    C#技巧记录——持续更新
    结点和节点的区别
    WebSocketSharp send record_stop without send record_start
    cefsharp 拦截所有请求 解决chunked导致数据接收不完整的问题
    计算mp3长度 毫秒
    pydub分割音频文件
    c# 获取文件信息
    实现一边写代码一边展示网页的效果
    c# webapi swagger Area 多级层次分组 添加header参数
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/8215090.html
Copyright © 2011-2022 走看看