hdu1518Square

dfs hdu 1518 square http://acm.hdu.edu.cn/showproblem.php?pid=1518 #include #include #include using namespace std; int a[20],m,flag,sum,side; bool f[20]; //注意搜索策略,之前没有用p来记录,每次for()都从i=0开始导致TLE //sum 剩余边的总和 阅读详情

Square

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


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
 
 题目类型:深搜DFS

题意: 给你一堆木棒,你能否用这些木棒(全部用完)将其拼成一个正方形,

题解:说实话我第一次这个题目不知道怎么去写,因为当时没理解题意(就算理解了能不能A掉也当令说),他说的全部用完,哎 ,不说了,待会又要抱怨我的英语了,我看的 是网上的题解,最后按照他的题解去实现自己的代码,排序一下,大的在前,小的在后,节省时间,我刚开始dfs函数只有两个参数,一个是count,代表此时完成了有几条边,还有一个是x,代表当前木棍加起来的值,加起来等于每一条边的长度后(数据给出后长度是固定的,等于数据之和除以4,如果有余数,说明不能组成正方形),count+1;此时x便清零,继续搜索,发现交掉后超时;后来加上一个w作为记录数组下标的参数,就过了,我调试代码发现w还真是有作用:因为由于排序之后,大的在前面小的在后面,w作为一个标记,就会减少时间,从而不会超时,比如这样一组数据(排序后):
12 12(0) 10(1) 8(2) 6(3) 4(4) 4(5) 3(6) 3(7) 2(8) 2(9) 1(10) 1(11);括号内代表下标,12(0)跟2(8)组合,10(1)跟4(4)组合,8(2)跟6(3)组合,接下来注意w的作用了:4(5),x=4(5),不满足等于lengh,w=5,就会从下标为5那里往后去搜索,节省了时间;  

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
int M,N;
int visit[40],a[40];
int flag;		//标记
int n;			//每一组数据个数
int lengh;		//边长

int cmp(const void *a,const void *b)//排序过后大的将会在小的前面,搜索起来耗得时间也少一些
{
	return (*(int *)b - *(int *)a);
}

void dfs(int count,int x,int w)	
/*count代表边长数,x代表将那些边加起来等于lengh(x会一直逼近lengh,最后等于lengh);
为什么要加一个w参数,
*/
{
	int i;
	
	if(x==lengh)
	{
		x=0;
		w=0;
		count++;
		if(count==4)
		{
			flag=1;
			return ;
		}
	}
	for(i=w;i<n;i++)
	{
		if(!visit[i]&&x+a[i]<=lengh)
		{
			visit[i]=1;
			dfs(count,x+a[i],i);
			visit[i]=0;
		}
		if(flag)
			return ;
	}
}
int main()
{
	int T,sum,i;
	scanf("%d",&T);
	while(T--)
	{
		memset(visit,0,sizeof(visit));
		sum=0;
		scanf("%d",&n);
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
			sum+=a[i];
		}
		if(sum%4!=0)	//如果不能整除4,说明不能组成正方形,因为他要将木料全部用完
		{
			printf("no\n");
			continue;
		}
		qsort(a,n,sizeof(a[0]),cmp);
		lengh=sum/4;
		if(a[0]>lengh)
		{
			printf("no\n");
			continue;
		}
		flag=0;
		//visit[0]=1;
		dfs(0,0,0);
		if(flag)
			printf("yes\n");
		else
			printf("no\n");
	}
	return 0;
	
}

/*
3
12 1 1 2 2 3 3 4 4 6 8 10 12
3
12 12 10 8 6 4 4 3 3 2 2 1 1
12 1 2 2 2 3 3 4 4 6 8 10 12
  */


 

 

     

 
详解AUTOSAR:DaVinci Configurator导入ARXML配置(拓展篇—2) DaVinci Configurator导入ARXML配置。 阅读详情

相关推荐

pcle接口详解&用途说明

它原来的名称为“3GIO”,由英特尔在2001年提出。pcel x16插槽 用途用于显卡、RAID阵列卡,向下兼容PCIE x1/x4/x8/x16。(PCIE x16插槽长89mm,有164根针脚,靠主板外侧端有一卡口,将16x分为前后两组,短插槽有22根针脚,主要用于供电,长插槽142根,主要用于数据传输,具有16通道所带来的高带宽)PCI-E x8插槽插槽用途:全长56mm,有98根针脚,与PCI-E x16比较,主要是数据针脚减少至76根,短的供电针脚仍然是22针脚。

qq_43289307的博客 1万+

hdu1518Square【经典深搜】

好久没做深搜了,上午优哉游哉的想自己的为啥超时要咋剪枝呢,得到下午就考生态期中的噩耗直接跑出去了~。~ 说题意:一个月前学弟问过,简单看过代码,都忘了,(⊙﹏⊙)b 既然是深搜,函数参数里面一定是带着需要用的量的== 对于这个题来说,带着的三个参数分别是:当前这条边的长度,凑完的边数,从第几个木棍开始找 代码: /*********** hdu1518 2015.12.14 1045MS

MissZhou要努力 1924

LangChain + PlayWright实战:5分钟搞定网页自动化测试(附完整代码)

本文详细介绍了如何利用LangChain与PlayWright构建智能网页自动化测试系统。通过环境配置、核心架构设计、实战Agent构建及性能优化等步骤,开发者可以快速实现高效的Web操作自动化,提升测试效率。文章还提供了完整代码示例和典型问题解决方案。

weixin_27791839的博客 239

HDU1518 Square

HDU1518 Square 一般的DFS是搜索到一条满足就行了,这种题目是搜索多条满足题意:用上所有的长度组合成四条相等的边长#include<cstdio> #include<algorithm> #include<cstring> using namespace std; int a[30],visited[30]; int n,W; int flag; void dfs(int cur,i

Daniel 446

VSCode + ESP-IDF 项目搭建及配置

VSCode 搭建 ESP-IDF 开发环境

weixin_51358957的博客 2万+

解锁 STP 与 SOLIDWORKS 转换密码:工具及迪威在线转换秘籍

STP 文件能够完整地记录 3D 模型的几何形状、尺寸、公差、材料属性等丰富信息,无论是简单的机械零件,还是复杂的装配体,都能精准呈现。而在线转换以迪威模型为例,凭借便捷性、高效性和安全性,为广大 3D 专业技术人员和学生党在无需安装额外软件的情况下,轻松实现格式转换提供了有力支持。在实际工作和学习中,可根据自身具体情况灵活选择合适的转换方式,以确保 3D 设计工作流程的顺畅进行,让创意在不同格式间自由流动并绽放光彩。在 3D 设计与建模的广袤世界里,不同格式文件间的转换常常是连接创意与实现的关键桥梁。

技术说明博主 3444

hdu1518 Square--DFS

原题链接: http://acm.hdu.edu.cn/showproblem.php?pid=1518 一:原题内容 Problem Description Given a set of sticks of various lengths, is it possible to join them end-to-end to form a square?

半壶老酒 1412

基于STM32、HAL库的IP2736U_EF快充协议芯片简介及驱动程序设计

@param connected: 连接状态指针 (1=已连接, 0=未连接)= 0x2736) // 检查厂商ID。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。

corlin6688的博客 430

hdu 1518 Square

Square                                                                                 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)                        

逸疏 860

广州吉欧电子科技有限公司安卓开发工程师岗位 - 技术核心、职责详解与面试指南

广州吉欧电子科技有限公司招聘安卓开发工程师,该岗位可接收优秀应届生。岗位职责包括:1)负责安卓应用架构设计与开发,确保稳定性和可扩展性;2)功能模块编码实现与测试;3)性能优化与用户体验提升;4)后端接口对接;5)系统版本适配;6)用户反馈处理迭代;7)特殊要求熟悉RTK高精度定位技术原理及使用。该岗位要求扎实的安卓开发技术、良好的架构设计能力、性能优化经验,以及特定领域的RTK专业知识,是一个技术全面且具有专业特色的开发岗位。

郑伟强dev的专栏 153

张力控制速度闭环控制算法

这个算法的核心思想是通过比较实际速度和期望速度的差异来调整控制信号,以达到稳定的速度控制。比例项用于直接根据误差调整输出,积分项用于积累误差并进行补偿,微分项用于预测误差的变化趋势并进行调整。张力控制是在许多工程和工业应用中非常重要的一个过程,它涉及到通过调节力的大小来实现稳定的工作状态。通过合理设置比例、积分和微分系数,并结合实际系统的特性进行调试和优化,可以实现准确稳定的张力控制。速度闭环控制算法通过比较实际速度和期望速度之间的差异,并根据差异调整系统的输出,以保持速度稳定。

LiJavascript的博客 1301

HDU 1518 Square

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1518 思路:DFS+剪枝 这题一直想了好久没做出来,最后想到DFS,交了两次都TLE了  (+ . +)|||............ 没办法,看别人的解题报告了,也是DFS ,有些地方优化了,终于AC了 ^0^…… #include #include us

qinmusiyan的专栏 965

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【DFS】hdu 1518 Square

http://acm.hdu.edu.cn/showproblem.php?pid=1518 #include #include using namespace std; const int NM=22; int a[NM],vis[NM],m,flag,tol; void DFS(int ans,int sum,int k) { int i; if(sum>tol) return;

yduqytd的专栏 663

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

hdu 1518 Square(DFS)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1518 思路:先判断基本的构成正方形的条件,就是main函数内两个判断,然后再dfs,先判断能否组成正方形的一条边,如果能组成,则从头开始搜索,继续找下一条边,如果不能组成一条边,则从当前位置继续搜索,直到找到满足条件的数字或结束 #include #include int nums[21],n

梦幻的蔷薇色 384

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

hdu1518 Square

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1518 题目为: Square Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7839    Accepted Submi

大洋深处 1345

【DFS】HDU1518Square

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1518 Problem Description Given a set of sticks of various lengths, is it possible to join them end-to-end to form a square?   Input

wlxsq的专栏 391

hdu 1518 square

Square Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11794 Accepted Submission(s): 3784 Problem Description Given a set of sticks of

mtxxxx的blog 290

hdu 1518 Square

关键在于优化剪枝 #include #include #include #include using namespace std; int mapp[20+5],visit[20+5]; int flag; int l,m; void dfs(int s,int x,int num) { visit[s]=1; if(x==l) num++,s=0,x=0; if(num==4) {

zafkiel_nightmare的专栏 615

告别手动画圈!用Python实现Q-M算法自动化简布尔表达式(附完整代码)

本文详细介绍了如何使用Python实现Q-M(Quine-McCluskey)算法来自动化简布尔表达式,适用于数字电路设计和逻辑优化。通过核心原理解析、关键代码实现及性能优化技巧,帮助开发者高效处理多变量布尔表达式,告别传统手动画圈的繁琐过程。

weixin_33698823的博客 304

hdu 1518 Square

Square Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8260    Accepted Submission(s): 2687 Problem Description Given a set of sti

搞么子小子 1255

hdu 1518 square

Square Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9502    Accepted Submission(s): 3091 Problem Description Given a set of sticks

u013497977的专栏 662

HDU 1518 Square (搜索)

链接http://acm.hdu.edu.cn/showproblem.php?pid=1518 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 inpu...

bravo的博客 361

HDU1518 Square 【剪枝】

Square Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8900    Accepted Submission(s): 2893 Problem Description Given a set of sti

长风的专栏 1032
上一篇: hdu1434幸福列车
下一篇: hdu1010Tempter of the Bone
cnzhanj
博客等级 码龄12年 5粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值