http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2410

/*
题意;
给出一定数量的棍子用这些棍子组成一个正方形
要求把这些棍子全部用完
能组成正方形输出yes否则输出no

分析;

正方形的边长都相同
即是找出四条边长一样的边

第一 : 周长必须是4的倍数
第二 : 最长的木棍必须小于等于边长
第三:木棍重大到小排序 找边是从大向小的开始找,不必每次都从头找一遍

*/

include

include

include

using namespace std;
int stick[25];
int vis[25];
int op=0,bianZhang ;
int m;
bool myCmp(int a,int b)
{
return a>b;
}
void dfs(int cur,int sum,int start)
{
if(cur==3)
{
op=1;
return ;
}
if(op)return ;
for(int i=start; i<m; i++)
{
if(vis[i]==1)continue;
if(sum+stick[i]==bianZhang)
{
if(op)return;//如果没有 超时
vis[i]=1;
dfs(cur+1,0,0);//找到一条边 准备找下一条
vis[i]=0;
}
else if(sum+stick[i]<bianZhang)//还没有组成一条边
{
if(op)return;//如果没有 超时
vis[i]=1;
dfs(cur,sum+stick[i],i);
vis[i]=0;
}
}
return ;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
memset(stick,0,sizeof(stick));
memset(vis,0,sizeof(vis));
op=0;
int sum=0;
for(int i=0; i<m; i++)
{
scanf("%d",&stick[i]);
sum+=stick[i];
}
if(sum%4!=0||m<4)
{
printf("no\n");
continue;
}
sort(stick,stick+m,myCmp);
bianZhang=sum/4;
if(stick[0]>bianZhang)
{
printf("no\n");
continue;
}
dfs(0,0,0);
if(op )
printf("yes\n");
else
printf("no\n");
}
return 0;
}

Square(强大的剪枝)的更多相关文章

  1. [Vijos1308]埃及分数(迭代加深搜索 + 剪枝)

    传送门 迭代加深搜索是必须的,先枚举加数个数 然后搜索分母 这里有一个强大的剪枝,就是确定分母的范围 #include <cstdio> #include <cstring> ...

  2. [CSP-S模拟测试]:physics(二维前缀和+二分+剪枝)

    题目传送门(内部题26) 输入格式 第一行有$3$个整数$n,m,q$.然后有$n$行,每行有一个长度为$m$的字符串,$+$表示正电粒子,$-$表示负电粒子.然后有$q$行,每行$2$个整数$x,y ...

  3. kylin剪枝优化的两种方式

    1.衍生维度. 在kylin中,如果某些维度都属于同一种类型,且数量较多,可以考虑做成衍生维度. 衍生维度就是将一批维度做成一张维度表,只在源表中保留这张表的外键,这样预处理的时候,就只会处理这个外键 ...

  4. ACdream 1726 A Math game

    深搜.不过有一个强大的剪枝.就是假设之后的全部用上都不能达到H,则return. if (A[n]-A[x-1]+summ< H) return; //A[n]表示前nx项和 #include& ...

  5. 舞蹈链(DLX)

    舞蹈链(DLX) Tags:搜索 作业部落 评论地址 一.概述 特别特别感谢这位童鞋His blog 舞蹈链是一种优美的搜索,就像下面这样跳舞- 舞蹈链用于解决精确覆盖或者重复覆盖的问题 你可以想象成 ...

  6. Root :: AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 5. Dynamic Programming

    10192 最长公共子序列 http://uva.onlinejudge.org/index.php?option=com_onlinejudge& Itemid=8&page=sho ...

  7. 1317: Square(DFS+剪枝)

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

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

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

  9. USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)

    这题可真是又让我找到了八数码的感觉...哈哈. 首先,第一次见题,没有思路,第二次看题,感觉是搜索,就这样写下来了. 这题我几乎是一个点一个点改对的(至于为什么是这样,后面给你看一个神奇的东西),让我 ...

随机推荐

  1. Chrome浏览器允许跨域请求配置

    最近有个做数据标注的任务,但是标注平台是别人公司的,他们又不愿意对平台进行升级改造: 其实要改的地方也很简单,就是对页面做一些处理,做一些脚本控制. 没办法,做了个 iframe 给她嵌入到我们自己的 ...

  2. hdu2962 Trucking (最短路+二分查找)

    Problem Description A certain local trucking company would like to transport some goods on a cargo t ...

  3. splice 操作符

    几乎所有的数组操作都可用 splice 实现. 除了第一个参数,数组,为必须,其余的参数都不是必须的. splice ARRAY, OFFSET, LENGTH, LIST OFFSET 和 LENG ...

  4. 『重构--改善既有代码的设计』读书笔记----Introduce Local Extension

    同Introduce Foreign Method一样,很多时候你不能修改编辑原始类,你需要为这些服务类增加一些额外的函数,但你没有这个权限或者入口.如果你只需要一个或者两个外加函数那么你可以放心的使 ...

  5. Become a Windows Insider and Test New Windows 10 Features

    SR: To write an Edge browser extension. Microsoft is releasing Windows 10 build 14291 with browser e ...

  6. 反射给对象赋值遇到的问题——类型转换[转http://blog.csdn.net/xiaohan2826/article/details/8536074]

    发布时间:2012-10-25 10:49浏览次数:225 给一个对象属性赋值可以通过PropertyInfo.SetValue()方式进行赋值,但要注意值的类型要与属性保持一致.   创建对象实例的 ...

  7. One-day-学习笔记-商品成交时发送短信

    个人学习笔记(one) 根据需求:商品成交时发送短信 html代码省略..... Model代码省略..... /* * --------------------------------------- ...

  8. javascript为目标标签添加class样式

    利用jQuery $("#目标id").addClass("加的class名字");

  9. magento站点还原到本地

    问题描述 首先将网站文件夹解压到xampp/htdocs/wenjianjia目录下,然后替换sql文件里的域名为localhost/wenjianjia.然后访问前台,正常.访问后台,出问题了 Ma ...

  10. [Python]更加Pythonic的多个List合并和Python的安利

    原题: https://segmentfault.com/q/1010000005904259 问题: 倘若存在 L=[ [1,2,3],[4,5,6],[7,8,9]] 这样的列表,如何把合并成[1 ...