Square(强大的剪枝)
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(强大的剪枝)的更多相关文章
- [Vijos1308]埃及分数(迭代加深搜索 + 剪枝)
传送门 迭代加深搜索是必须的,先枚举加数个数 然后搜索分母 这里有一个强大的剪枝,就是确定分母的范围 #include <cstdio> #include <cstring> ...
- [CSP-S模拟测试]:physics(二维前缀和+二分+剪枝)
题目传送门(内部题26) 输入格式 第一行有$3$个整数$n,m,q$.然后有$n$行,每行有一个长度为$m$的字符串,$+$表示正电粒子,$-$表示负电粒子.然后有$q$行,每行$2$个整数$x,y ...
- kylin剪枝优化的两种方式
1.衍生维度. 在kylin中,如果某些维度都属于同一种类型,且数量较多,可以考虑做成衍生维度. 衍生维度就是将一批维度做成一张维度表,只在源表中保留这张表的外键,这样预处理的时候,就只会处理这个外键 ...
- ACdream 1726 A Math game
深搜.不过有一个强大的剪枝.就是假设之后的全部用上都不能达到H,则return. if (A[n]-A[x-1]+summ< H) return; //A[n]表示前nx项和 #include& ...
- 舞蹈链(DLX)
舞蹈链(DLX) Tags:搜索 作业部落 评论地址 一.概述 特别特别感谢这位童鞋His blog 舞蹈链是一种优美的搜索,就像下面这样跳舞- 舞蹈链用于解决精确覆盖或者重复覆盖的问题 你可以想象成 ...
- 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 ...
- 1317: Square(DFS+剪枝)
Description Given a set of sticks of various lengths, is it possible to join them end-to-end to form ...
- HDU1518 Square(DFS,剪枝是关键呀)
Square Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submi ...
- USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)
这题可真是又让我找到了八数码的感觉...哈哈. 首先,第一次见题,没有思路,第二次看题,感觉是搜索,就这样写下来了. 这题我几乎是一个点一个点改对的(至于为什么是这样,后面给你看一个神奇的东西),让我 ...
随机推荐
- 如何通过WiFi来进行Android的真机模拟
我们知道,在使用模拟机模拟的时候会出现较多的问题,所以如果有一部Android手机的话进行真机模拟是极好的. 准备工作: 第一种方法:使用数据线,具体操作百度.略(非WIFI操作的真机模拟) 第二方法 ...
- 开源的Android开发框架-------PowerFramework使用心得(五)网络请求HTTPRequest
GET请求示例 //所有参数都使用Bundle,用putString Bundle bundle = new Bundle(); bundle.putString("username&quo ...
- ImageView 设置OnTouchListener
ImageView的OnTouchListener,onTouch方法要返回true,MotionEvent.ACTION_UP,MotionEvent.ACTION_MOVE 才有效. 其实关于返回 ...
- 无软驱加载raid驱动安装windows2003及其他微软操作系统
[转载]http://blog.zol.com.cn/2650/article_2649199.html [另一篇]http://www.blue1000.com/bkhtml/c159/2013-0 ...
- C#获取类中所有方法
var t = typeof(HomeController); //获取所有方法 System.Reflection.MethodInfo[] methods = t.GetMethods(); // ...
- SQL中使用的一些函数问题
abs()取绝对值ceil()上取整floor()下取整initcap()使串中的所有单词的首字母变为大写substr()取子串 这些函数都是oracle的sql内置函数.
- js转换/Date(........)/
eval('new ' + (datetime.replace(/\//g, ''))); 好记性不如烂笔头,记下以备后用.
- yum版本新增包的一般步骤
在Jekins的自动构建环境中,有时会有在构建出的ISO中添加新应用app需求,对于采用rpm包源代码管理方式的构建环境来说,基本步骤如下: 1.下载app的src.rpm包 2.解压src.rpm包 ...
- Python自动化运维之29、Bottle框架
Bottle 官网:http://bottlepy.org/docs/dev/index.html Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除 ...
- ios 排序汇总
ios 排序汇总 IOS几种简单有效的数组排序方法 //第一种,利用数组的sortedArrayUsingComparator调用 NSComparator ,obj1和obj2指的数组中的对象 N ...