POJ 2362:Square 觉得这才算深度搜索
| Time Limit: 3000MS | Memory Limit: 65536K | |
| Total Submissions: 21821 | Accepted: 7624 |
Description
Input
Output
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
这个题和POJ1011觉得真的是两道特别棒的题目,仔细琢磨很有味道。这个题一开始输出大写的YES和NO导致WA了一次。。。
题意是给你M根木棒,接下来给你每根木棒的长度,问这些木棒是否能够构成一个正方形。
具体理解见代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; int num_s,flag,sum;
int stick[25];
bool visit[25]; bool dfs(int num,int length,int stick_st,int * stick,bool *visit)
{
if(num==4)
return true;
int i;
for(i=stick_st;i<=num_s;i++)
{
if(visit[i])continue; visit[i]=true;
if(length+stick[i]<(sum/4))
{
if(dfs(num,length+stick[i],i+1,stick,visit))
{
return true;
}
}
else if(length+stick[i]==(sum/4))
{
if(dfs(num+1,0,1,stick,visit))
{
return true;
}
}
visit[i]=false;
}
return false;
} bool cmp(const int a,const int b)
{
return a>b;
} int main()
{
int Test,i;
cin>>Test; while(Test--)
{
cin>>num_s;
sum=0;
flag=0;
for(i=1;i<=num_s;i++)
{
cin>>stick[i];
visit[i]=false;
sum += stick[i];
}
if(num_s<4||sum%4)//剪枝1:如果木棒数量小于4,cut。
//剪枝2:如果sum的和不能整除4,cut。
{
cout<<"no"<<endl;
}
else
{
sort(stick+1,stick+1+num_s,cmp);
if(stick[1]>sum/4)//剪枝3:如果最大的一根木棒大于了sum/4,cut。
cout<<"no"<<endl;
else
{
if(dfs(1,0,1,stick,visit))//第一个数代表当前要完成的第几根木棒
//第二个数代表当前已经完成的长度
//第三个数代表从第几个木棒开始查找的
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
}
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 2362:Square 觉得这才算深度搜索的更多相关文章
- DFS POJ 2362 Square
题目传送门 /* DFS:问能否用小棍子组成一个正方形 剪枝有3:长的不灵活,先考虑:若根本构不成正方形,直接no:若第一根比边长长,no 这题是POJ_1011的精简版:) */ #include ...
- POJ 2362 Square DFS
传送门:http://poj.org/problem?id=2362 题目大意: 给一些不同长度的棍棒,问是否可能组成正方形. 学习了写得很好的dfs 赶紧去玩博饼了.....晚上三个地方有约.... ...
- POJ 2362 Square
题意:给n个木棍,问能不能正好拼成一个正方形. 解法:POJ1011的简单版……不需要太多剪枝……随便剪一剪就好了……但是各种写屎来着QAQ 代码: #include<stdio.h> # ...
- 54.1 怎样才算学会django? 知道这28个知识点才算会django2
学到什么程度才算会django了?这篇文章帮你梳理一下 关于django2的28个不可不知的知识点总结: 1.cookie操作: -客户端本地存储的键值对 2.session操作: -服务器端可以保存 ...
- Java进阶(二十)解疑答惑之何时字符串才算真正为空?
解疑答惑之何时字符串才算真正为空? 在一次编码过程中,有一个现象一直困扰着自己,经过后台的不断调试,才发现原来有时候字符串的空非空.测试代码如下: // medname可为药品名称或药品ID Stri ...
- ZT 怎么样才算熟悉设计模式? [问题点数:40分,结帖人jiaoyun007]
http://bbs.csdn.net/topics/390448668?page=1#post-394406161 近日面试,因为个人简历里有“熟悉设计模式”这句话,面试官边侃侃发问了:什么是装饰模 ...
- 洛谷P1605 迷宫 深度搜索 模板!
题目背景 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右四种方式,每次只能移 ...
- F - 蜘蛛牌(深度搜索)
Problem Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么 ...
- 题目--oil Deposits(油田) 基础DFS(深度搜索)
上一次基本了解了下BFS,这次又找了个基本的DFS题目来试试水,DFS举个例子来说就是 一种从树的最左端开始一直搜索到最底端,然后回到原端再搜索另一个位置到最底端,也就是称为深度搜索的DFS--dep ...
随机推荐
- SQLSERVER|CDC 日志变更捕获机制
先说一下什么是cdc ,cdc 变更数据捕获(Change Data Capture ,简称 CDC)记录 SQL Server 表的插入.更新和删除活动.SQLServer的操作会写日志,这也是CD ...
- day02-Python运维开发基础
1. Number 数据类型 2. 容器数据类型-字符串 """ 语法: "字符串" % (值1,值2 ... ) 占位符: %d 整型占位符 %f ...
- vscode dart 插件 关闭自动注释
vscode dart 插件 关闭自动注释 左下角设置 --> 搜索 Closing Labels --> 去掉勾选
- Ubuntu1804 双网卡的设置
在WIFI模式下,既可以使用ping开发板,又可上网. 目标:ubuntu1804下使用两个网卡 网卡(eth0):用于桥接主机的物理网卡 网卡(eth1):用于NAT模式下共享主机IP,用于 ...
- Acwing200 Hankson的趣味题
原题面:https://www.acwing.com/problem/content/202/ 题目大意:gcd(x,a0)=a1,lcm(x,b0)=b1,问你有多少满足条件的正整数x. 输入描述: ...
- DRF项目之通过业务逻辑选择数据集和序列化器
在REST后台开发中,我们需要通过业务逻辑来选择数据集或者序列化器. 选择数据集: # 重写get_queryset实现通过业务逻辑选择指定数据集 def get_queryset(self): '' ...
- Vulkan Device Memory
1.通过下面的接口,可以获得显卡支持的所有内存类型: MemoryType的类型如下: 2.引用索引3对内存的描述 我们可以通过调用vkGetPhysicalDeviceMemoryPropertie ...
- 五十七、SAP中关于信息框的总结
一.事务代码SE91 二.里面有我们创建过的一个消息类Z_TIANPAN_201907_MSG 三.这个消息类中有2个内容 四.我们的代码如下 五.S001效果 六.E001和W001效果 七.I00 ...
- 二十二、SAP中创建一个内表,并添加内容循环输出显示
一.直接上代码 二.输出如下
- JVM学习与问题总结——java内存区域与内存溢出异常
java虚拟机将内存分为哪些区域? 根据Java SE7版本的Java虚拟机规范,虚拟机管理的内存包括5个运行时数据区域: 程序计数器 虚拟机栈 本地方法栈 方法区 堆 运行时数据区各部分的作用? 程 ...