Square
Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 21821   Accepted: 7624

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

这个题和POJ1011觉得真的是两道特别棒的题目,仔细琢磨很有味道。这个题一开始输出大写的YES和NO导致WA了一次。。。

题意是给你M根木棒,接下来给你每根木棒的长度,问这些木棒是否能够构成一个正方形。

具体理解见代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; int num_s,flag,sum;
int stick[25];
bool visit[25]; bool dfs(int num,int length,int stick_st,int * stick,bool *visit)
{
if(num==4)
return true;
int i;
for(i=stick_st;i<=num_s;i++)
{
if(visit[i])continue; visit[i]=true;
if(length+stick[i]<(sum/4))
{
if(dfs(num,length+stick[i],i+1,stick,visit))
{
return true;
}
}
else if(length+stick[i]==(sum/4))
{
if(dfs(num+1,0,1,stick,visit))
{
return true;
}
}
visit[i]=false;
}
return false;
} bool cmp(const int a,const int b)
{
return a>b;
} int main()
{
int Test,i;
cin>>Test; while(Test--)
{
cin>>num_s;
sum=0;
flag=0;
for(i=1;i<=num_s;i++)
{
cin>>stick[i];
visit[i]=false;
sum += stick[i];
}
if(num_s<4||sum%4)//剪枝1:如果木棒数量小于4,cut。
//剪枝2:如果sum的和不能整除4,cut。
{
cout<<"no"<<endl;
}
else
{
sort(stick+1,stick+1+num_s,cmp);
if(stick[1]>sum/4)//剪枝3:如果最大的一根木棒大于了sum/4,cut。
cout<<"no"<<endl;
else
{
if(dfs(1,0,1,stick,visit))//第一个数代表当前要完成的第几根木棒
//第二个数代表当前已经完成的长度
//第三个数代表从第几个木棒开始查找的
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
}
}
}
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 2362:Square 觉得这才算深度搜索的更多相关文章

  1. DFS POJ 2362 Square

    题目传送门 /* DFS:问能否用小棍子组成一个正方形 剪枝有3:长的不灵活,先考虑:若根本构不成正方形,直接no:若第一根比边长长,no 这题是POJ_1011的精简版:) */ #include ...

  2. POJ 2362 Square DFS

    传送门:http://poj.org/problem?id=2362 题目大意: 给一些不同长度的棍棒,问是否可能组成正方形. 学习了写得很好的dfs 赶紧去玩博饼了.....晚上三个地方有约.... ...

  3. POJ 2362 Square

    题意:给n个木棍,问能不能正好拼成一个正方形. 解法:POJ1011的简单版……不需要太多剪枝……随便剪一剪就好了……但是各种写屎来着QAQ 代码: #include<stdio.h> # ...

  4. 54.1 怎样才算学会django? 知道这28个知识点才算会django2

    学到什么程度才算会django了?这篇文章帮你梳理一下 关于django2的28个不可不知的知识点总结: 1.cookie操作: -客户端本地存储的键值对 2.session操作: -服务器端可以保存 ...

  5. Java进阶(二十)解疑答惑之何时字符串才算真正为空?

    解疑答惑之何时字符串才算真正为空? 在一次编码过程中,有一个现象一直困扰着自己,经过后台的不断调试,才发现原来有时候字符串的空非空.测试代码如下: // medname可为药品名称或药品ID Stri ...

  6. ZT 怎么样才算熟悉设计模式? [问题点数:40分,结帖人jiaoyun007]

    http://bbs.csdn.net/topics/390448668?page=1#post-394406161 近日面试,因为个人简历里有“熟悉设计模式”这句话,面试官边侃侃发问了:什么是装饰模 ...

  7. 洛谷P1605 迷宫 深度搜索 模板!

    题目背景 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右四种方式,每次只能移 ...

  8. F - 蜘蛛牌(深度搜索)

    Problem Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么 ...

  9. 题目--oil Deposits(油田) 基础DFS(深度搜索)

    上一次基本了解了下BFS,这次又找了个基本的DFS题目来试试水,DFS举个例子来说就是 一种从树的最左端开始一直搜索到最底端,然后回到原端再搜索另一个位置到最底端,也就是称为深度搜索的DFS--dep ...

随机推荐

  1. 2-10 就业课(2.0)-oozie:5、通过oozie执行hive的任务

    4.2.使用oozie调度我们的hive 第一步:拷贝hive的案例模板 cd /export/servers/oozie-4.1.0-cdh5.14.0 cp -ra examples/apps/h ...

  2. vSphere HA 原理与配置

    内容预览: 1. vSphere HA 概述 2. vSphere HA 提供的保护级别 3. vSphere HA运行原理 4. vSphere HA 故障支持场景 5. vSphere HA接入控 ...

  3. java理解抽象类 2.19

    // Telphone.java public abstract class Telphone{ public abstract void call(); public abstract void m ...

  4. 《新标准C++程序设计》4.7-4.9(C++学习笔记17)

    一.重载类型强制转换运算符 在C++中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符.类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数.经过 ...

  5. 7.9 规划Varnish缓存

    ./varnishlog -i VCL_LOG

  6. 1 初识JVM

  7. 编译安装常用包+阿里镜像源-常用资源-系统-下载-科莱软件下载-docker仓库包-安全圈-杏雨梨云-图形界面安装-docker私有双仓库-阿里源报错处理-centos7目录大小

    yum install apr-util apr-util-devel apr apr-devel pcre pcre-devel zlib zlib-devel openssl openssl-de ...

  8. 精简总结redis/rabbitmq/zookeeper在linux centos7上的安装

    因为本博主之前已经写过了相关的一些安装及集群,可以参考前面的记录,但是由于博最近更换了VM14和centos7,为了适应这些环境,所以后续会逐渐重新搭建相关环境,并对之前的安装思路进一步精简梳理,以期 ...

  9. 修改序列(Sequence)的初始值(START WITH)

    1 执行:Alter Sequence SeqTest2010_S Increment By 1007; 2 执行:Select SeqTest2010_S.NextVal From Dual; 3 ...

  10. python基础笔记:判断与循环

    判断: #根据身高为1.75,体重为65的小明的bmi输出小明的身材 h=1.75 w=65 bmi=w/(h*h) if bmi<18.5: print('过轻') elif bmi<= ...