POJ 2362 Square (DFS +剪枝)

HDU1518 & POJ2362 & ZOJ1909 Square(DFS,剪枝是关键呀) Square Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 9   Accepted Submission(s) : 4 Problem Description Given a set of sticks of v 阅读详情

Square

 

Time Limit: 3000MSMemory Limit: 65536K
Total Submissions: 19982Accepted: 6955

 

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

Source

 

 

题目链接  :http://poj.org/problem?id=2362

 

题目大意  :有n个木条,问用这n个木条能不能拼出一个正方形

 

题目分析  :DFS+剪枝,这题是POJ 1011 那题的简单版,而且这题时间放的很宽,基本上小剪一下就可以过,笔者本着学习的态度写了不少剪枝,依旧跑了110ms,不知0ms大神是怎么做到的,若有大神知道还求指点

1.总长必须是4的倍数,否则无解

2.对木条从大到小排序,如果最长边大于总长的四分之一则无解,而且每次从长边开始选可以减少判断次数,因为长边的灵活度比较低,如果有一根长边用不上则无解

3.搜索时如果两根木条的长度相同,前一根没有选则后一根必然不会选

4.每次加之前判断加上是否会超过边长,若会超过则不选

 

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int const MAX = 21;
int stick[MAX];
int vis[MAX];  //标记木条是否用过
int num, side;  //num表示木条数,side表示边长
bool flag;
//cur表示当前正在拼装的木条长度,other表示其他的木条,count表示拼成的边数
bool cmp(int a, int b)
{
    return a > b;
}
bool DFS(int cur, int other, int count)
{
    //如果当前长度等于边长,count加1,当前长和其他都置为0开始拼下一条边
    if(cur == side)
    {
        count++;
        cur = 0;
        other = 0;
    }
    //如果count等于4,说明找到可行解,返回true
    if(count == 4)
        return true;
    for(int i = other; i < num; i++) //枚举其他木条
    {
        //若两个木棒长度相同,前一个没用,则这一个也不会用
        if(i && !vis[i-1] && stick[i] == stick[i-1])
            continue;
        //如果下一根未用且加上后长度小于边长
        if(cur + stick[i] <= side && !vis[i]) 
        {
            vis[i] = 1;  //标记为已使用
            //如果当前方案能找到可行解则返回true
            if(DFS(cur + stick[i], i + 1 , count))
                return true;
            //如果找不到,将改木条标记为未使用,供下一种方案使用
            vis[i] = 0;
        }
    }
    return false;
}

int main()
{
    int n, sum;
    scanf("%d",&n);
    while(n--)
    {
        flag = false;
        sum = 0;
        memset(vis,0,sizeof(vis)); //木条初始化为未用
        scanf("%d",&num);
        for(int i = 0; i < num; i++)
        {
            scanf("%d",&stick[i]);
            sum += stick[i];
        }
        sort(stick, stick+num, cmp); //将木条从小到大排序
        //如果总长不是4的倍数或者最长边大于总长的四分之一则不可能拼成
        if(sum % 4 || stick[0] > sum / 4)
        {
            printf("no\n");
            continue;
        }
        side = sum / 4;
        flag = DFS(0,0,0);
        if(flag)
            printf("yes\n");
        else
            printf("no\n");
    }
}


 

 

Python小波变换实战:用PyCWT分析气候数据(附完整代码) 本文详细介绍了如何使用Python中的PyCWT库进行小波变换分析,特别针对气候数据(如NINO3海温异常数据)的多尺度周期性特征提取。通过完整的代码示例,从数据预处理、小波参数配置到结果可视化,逐步指导读者掌握小波变换在气候研究中的实际应用。 阅读详情

相关推荐

Apple 网页 SRP 登录系列文章(四):Hashcash 工作量证明与完整登录流程

本文是Apple SRP登录系列文章的收官之作,重点解析了Apple独有的Hashcash工作量证明机制并展示了完整的登录流程实现。文章详细介绍了Hashcash的安全目的、格式标准、计算核心算法及难度评估方法,特别提供了Python实现代码。同时还讲解了如何动态获取服务器Hashcash参数以及建立容错机制。最后呈现了完整的Apple SRP登录主函数架构,为开发者提供了从理论到实践的全面指导。全文通过代码示例和流程分析,系统性地阐述了Apple安全登录机制的技术细节。

Sayid_Des的专栏 630

poj2362

Square 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

huanhuanxiaoxiao的博客 504

AutoCAD2014与ObjectARX开发环境搭建实战指南

本文提供了一份详细的AutoCAD2014与ObjectARX开发环境搭建实战指南。内容涵盖从AutoCAD2014、Visual Studio 2010及ObjectARX 2014 SDK的版本匹配与环境准备,到Wizard安装、编码问题解决、Visual Studio配置,并最终通过一个完整的绘图命令开发示例,手把手引导开发者创建并加载第一个可运行的ObjectARX插件,为后续深入开发奠定坚实基础。

weixin_28475533的博客 288

poj2362 - Square

想看更多的解题报告: http://blog.youkuaiyun.com/wangjian8006/article/details/7870410                                   转载请注明出处:http://blog.youkuaiyun.com/wangjian8006 题目大意:给出n条木棍的长度,将这些木棍头尾相接,问能不能组成一个正方形,如果可以,那么输出yes,否

贰圣 830

Windows系统下Mamba环境配置实战:从零到编译成功

本文详细记录了在Windows系统下从零开始配置Mamba深度学习环境的完整实战过程。针对官方不直接支持Windows的难点,文章提供了关键解决方案,包括安装特定版本的Python、PyTorch与第三方Triton,以及修改源码以解决Windows编译器的兼容性问题,最终成功编译并运行Mamba-SSM。

weixin_28842269的博客 500

FPGA远程更新实战:Multiboot双镜像配置与Flash分区策略

本文详细介绍了FPGA远程更新中Multiboot双镜像的配置与实现,重点对比了XDC约束和ICAPE2原语两种配置方案的优缺点及适用场景。提供了基于W25Q128 Flash的非对称分区策略、MCS文件生成与烧写方法,并深入探讨了远程更新的流程容错处理与可靠性优化建议,帮助开发者构建稳定可靠的FPGA远程更新系统。

ss78901的博客 839

POJ 2362 Square(DFS回溯构造)

POJ2362 Square(DFS回溯构造) http://poj.org/problem?id=2362 题意:给你M根长度可能不同的棍子,问你用着M根棍子能否拼成一个正方形. 分析:首先将M根棍子的总长sum求出,sum%4必须==0且任意一个棍子的长度        用vis[i]数组表示当前第i根棍子是否被使用了.        然后用dfs来判断能否构成正方形的三边即可.其中

code 2514

两相变频交错PFC实战:从论文理论到PSIM仿真的完整避坑指南

本文详细解析了两相变频交错PFC技术从理论到PSIM仿真的完整实现过程,特别针对CRM模式下的BOOST PFC设计挑战提供实用解决方案。涵盖周期值比较法与RS触发器法的对比实施、PSIM仿真中的过零处理与收敛性优化等核心问题,并给出硬件实现的进阶建议,助力工程师高效完成高功率密度PFC设计。

weixin_30632089的博客 423

POJ 2362 Square(DFS+剪枝)

POJ 2362 Square Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 27083 Accepted: 9158 Description Given a set of sticks of various lengths, is it possible to join them end-to-end...

ZQYnn's blog 397

现代软件开发技术 | 第1章:Spring基础

Spring是一个轻量级Java 开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。

知识库搭建ing 455

SAP Single Sign-On 全景指南:从传统 SAP SSO 到 SAP Secure Login Service for SAP GUI 的架构、场景与迁移实践

本文系统梳理了SAP生态下的单点登录技术方案,重点分析了SAP GUI的云化替代方案SAP Secure Login Service(SLS)。内容涵盖SNC、Kerberos/SPNEGO、SAML 2.0等核心协议的技术实现,对比了传统SAP SSO与新型SLS for SAP GUI的架构差异,并给出AS ABAP系统的具体实施路径。针对SAP GUI访问、浏览器访问Fiori/移动端等不同场景,提供了详细的协议选型建议和配置指南,帮助团队构建安全可靠且适应云时代的统一认证体系。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 273

【DFS + 剪枝】POJ 2362 Square

这段时间要沉迷刷题一段时间了,就让优快云陪我一起吧! 一、题目大意 这个题目的大致意思就是给定多个长度为M的数组,每个数组代表一系列的木棍,每个数组元素代表木棍长度,求问每个数组是否能够首尾相接,连接成一个正方形。如果可以的话输出yes,否则输出no 二、题目思路以及AC代码 一开始我以为这题就是简单的dfs,dfs的思路也很简单,就是首先根据输入数组求解出如果能合成正方形的边长,然后分4次...

Johnson的博客 238

构建高效的LLM应用测试框架

《构建高效的LLM应用测试框架》 关键词:LLM,测试框架,应用测试,效率优化,测试原理 摘要:本文将深入探讨构建高效LLM应用测试框架的必要性、方法与步骤,旨在为开发者提供一套系统化、可操作的测试解决方案,从而提升LLM

AI天才研究院 1048

POJ 2362 HDOJ 1518 Square DFS剪枝

Square Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 18949   Accepted: 6567 Description Given a set of sticks of various lengths, is it possible to join th

kdwycz的刷题空间 861

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

poj2362 Square DFS剪枝

Square Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 22779   Accepted: 7894 Description Given a set of sticks of various lengths, is it possible to join

EventQueue的博客 570

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Square poj2362深度优先搜索+剪枝

1.题目原文 Square Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 24028   Accepted: 8300 Description Given a set of sticks of various lengths, is it possibl

相思作坊半世离殇的博客 427

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

poj 2362 || zoj 1909 Square (DFS+剪枝)

题目链接:http://poj.org/problem?id=2362 题目大意:给出M条筷子,问是否能够拼凑成正方形,是则打印yes,否则no. 解题思路:范围4                   剪枝:1.总数不能被4整除,直接打印 no;                              2.最长的那个筷子大于平均数,直接打印 no;

ンZee的解题报告 1198

POJ 2362 Square-(DFS+ 剪枝)

题目链接 题目大意:     给定一组木棍长度的数据,求是否能拼成一个正方形. 解题思路:     简单的DFS遍历就好了,但是本题要考虑剪枝     1)当所有木棍长度和sum, 需要满足sum%4 = 0,否则拼不成正方形。     2)最长的木棍要满足小于边长side = sum / 4。     在1)2)条件下进行DFS遍历,可以减小时间复杂度。

小梁的编程学习之旅 331

poj 2362 Square (dfs+剪枝)

2362 -- Square   跟1011的Sticks差不多,不过这里是问给出的长度能否拼成一个正方形。这题数据比较小,不过对剪枝的要求还是差不多的。 主要的剪枝是: 1.由大到小排序后,在拼当前边的第一条棍子的时候必须选用当前没有用过的棍子中最长那条 2.在搞同一条边的时候,下一条棍子不会比之前选了的大 3.同一长度的棍子只搜一次 然后就是代码: 1 #include...

weixin_30790841的博客 102

POJ-2362 - Square (DFS + 剪枝)

Square 题目链接:A - Square POJ - 2362 题意 给你n个小木棍,要求全部用上,能否组成一个正方形。 思路 我原先的方法,非常非常暴力,就开个dfs,来记录每个状态的值,反正每个木棍都是要组成一个边的,于是我就枚举它放边的过程,复杂度为4^20次方吧,果然会炸。 有些基本的优化就不谈了,比如最长的边大于平均边,边总和不是4的倍数。。。 现在考虑枚举...

帅帅的博客 295

poj 2362 Square(dfs, 剪枝)

Square Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 23828   Accepted: 8253 Description Given a set of sticks of various lengths, is it possible to join th

CillyB的博客 449

ZOJ1909 POJ2362 HDU1518 Square,很经典的DFS+剪枝!

这题很经典的DFS+剪枝!我做了很久,DFS的回溯一直很混乱后来参考了这篇解题报告后顿时茅塞顿开!解题报告请猛击我!我的报告里面有对应的剪枝解释 /******************************************************************************* # Author : Neo Fung # Email : neosfun

Neo Fung的专栏 1634

DFS POJ 2362 Square

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

weixin_30363509的博客 76

hdu1518 Square | ZOJ1909 | POJ2362 (dfs + 剪枝)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1518 题意:给你n根木棒,问用光所有的木棒能否拼成正方形。 dfs 剪枝:        1、当搜到三条边的时候,第四条边也就确定了。这时就找到解了,可以停止搜索了。        2、由于每一根木棒都要使用,所以在搜第一条边的时候可以直接拿第一根木棒作为这条边的头一根木

天亮说晚安 1924
上一篇: POJ 2251 Dungeon Master (三维迷宫 BFS)
下一篇: 命令行之贪吃蛇
_TCgogogo_
博客等级 码龄12年 615粉丝 1081原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值