Square

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

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
/*
1优化
如果按照素数环的方法,是暴搜的。超。
当第一次满足if(p==sum)的时候,(1).不需要再继续搜索下去,(2).而且从头再开始搜。
要满足(1),(2)我们在DFS中设立两个相应的变量n,p;
if(sum=p+f[i]) dfs(0,0,cur+1);
else if(p+f[i]<sum) dfs(i,p+f[i],cur);
if(p==0) break;
这样话,能有效的处理满足 cur++的情况时,退出当前的搜索。
另外当数字相同的时候也处理,while(f[i]==f[i+1]) i++;
2优化
如果排序,从大到小进行选择数字,避免了随机,能提高速度。
3优化
if(sum%4!=0) no
else sum=sum/4;
cur只要满足 3 就可以了,不需要4。
*/
#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<algorithm>
using namespace std;
int f[];
int visit[];
int flag;
int sum;
int m;
bool cmp(int a,int b)
{
return a>b;
}
void dfs(int n,int p,int cur)
{
int i;
if(cur==)
{
flag=;
return;
}
if(flag==) return;
for(i=n+;i<=m;i++)
{
if(visit[i]== && flag==)
{
visit[i]=;
if(p+f[i]==sum)
dfs(,,cur+);
else if(p+f[i]<sum)
dfs(i,p+f[i],cur);
visit[i]=;
if(p==) break;
while(f[i]==f[i+]) i++;
}
}
}
int main()
{
int i,j,n;
while(scanf("%d",&n)>)
{
while(n--)
{
scanf("%d",&m);
sum=;
for(i=;i<=m;i++)
{
scanf("%d",&f[i]);
sum=sum+f[i];
}
if(sum%!=)
{
printf("no\n");
continue;
}
sort(f+,f++m,cmp);
for(j=;j<=m;j++)
visit[j]=;
flag=;sum=sum/;
dfs(,,);
if(flag==) printf("yes\n");
else printf("no\n");
}
}
return ;
}

hdu Square DFS的更多相关文章

  1. HDU 5143 DFS

    分别给出1,2,3,4   a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...

  2. Snacks HDU 5692 dfs序列+线段树

    Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...

  3. Oil Deposits HDU - 1241 (dfs)

    Oil Deposits HDU - 1241 The GeoSurvComp geologic survey company is responsible for detecting undergr ...

  4. hdu 1312(DFS)

    Red and Black Tme Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  5. HDU1518 Square(DFS,剪枝是关键呀)

    Square Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submi ...

  6. HDU 5877 dfs+ 线段树(或+树状树组)

    1.HDU 5877  Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...

  7. hdu 4751(dfs染色)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...

  8. HDU 1045 (DFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1045 题目大意:在不是X的地方放O,所有O在没有隔板情况下不能对视(横行和数列),问最多可以放多少个 ...

  9. HDU 1241 (DFS搜索+染色)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=1241 题目大意:求一张地图里的连通块.注意可以斜着连通. 解题思路: 八个方向dfs一遍,一边df ...

随机推荐

  1. ElasticSearch的基本认识和基本操作

    1.1.  ElasticSearch(简称ES) ES即为了解决原生Lucene使用的不足,优化Lucene的调用方式,并实现了高可用的分布式集群的搜索方案,其第一个版本于2010年2月出现在Git ...

  2. 栈的实现——java

    和C++一样,JDK包中也提供了"栈"的实现,它就是集合框架中的Stack类.关于Stack类的原理,在"Java 集合系列07之 Stack详细介绍(源码解析)和使用示 ...

  3. LayUI把表格中的时间戳改成格式化的时间

  4. Kafka数据可靠性与一致性解析

    Partition Recovery机制 每个Partition会在磁盘记录一个RecoveryPoint, 记录已经flush到磁盘的最大offset.broker fail 重启时,会进行load ...

  5. java验证身份证合理性

    package com.tiantian.util; import java.util.Calendar;import java.util.HashMap;import java.util.Map;i ...

  6. Andrew Ng机器学习第五章——多变量线性回归

    一.多变量线性回归的技巧之一——特征缩放 1.为什么要使用特征缩放? 特征缩放用来确保特征值在相似的范围之内. 设想这样一种情况(房价预测),两个特征值分别是房子的大小和卧室的数量.每个特征值所处的范 ...

  7. python中的sort方法

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不 ...

  8. Vue路由router-link的使用

    Vue路由router-link的使用 相关Html: <!DOCTYPE html> <html lang="en"> <head> < ...

  9. Map map=new HashMap()

    Map是接口,hashMap是Map的一种实现.接口不能被实例化.Map map=new HashMap(); 就是将map实例化成一个hashMap.这样做的好处是调用者不需要知道map具体的实现, ...

  10. VMware里Ubuntukylin-14.04-desktop的VMware Tools安装图文详解

    不多说,直接上干货! 总的来说,根据分为三个步骤. 步骤一: 点击 :虚拟机—–>安装VM tools 然后发现桌面会跳出如下问题: 客户机操作系统已将 CD-ROM 门锁定,并且可能正在使用 ...