等边三角形---dfs
蒜头君手上有一些小木棍,它们长短不一,蒜头君想用这些木棍拼出一个等边三角形,并且每根木棍都要用到。 例如,蒜头君手上有长度为 11,22,33,33 的4根木棍,他可以让长度为11,22 的木棍组成一条边,另外 22跟分别组成 22 条边,拼成一个边长为 33 的等边三角形。蒜头君希望你提前告诉他能不能拼出来,免得白费功夫。
输入格式
首先输入一个整数 n(3 \le n \le 20)n(3≤n≤20),表示木棍数量,接下来输入 nn 根木棍的长度 p_i(1 \le p_i \le 10000)pi(1≤pi≤10000)。
输出格式
如果蒜头君能拼出等边三角形,输出"yes",否则输出"no"。
样例输入1
5
1 2 3 4 5
样例输出1
yes
样例输入2
4
1 1 1 1
样例输出2
no
这也是典型的dfs:
对每一根木棍,要么加到a边,要么加到b边,要么加到c边。(因为所有的木棍都要使用)。dfs搜索每一个木棍即可。
#include<bits/stdc++.h>
using namespace std;
int n;
int l[];
int len;
bool dfs(int a,int b,int c,int id)
{
if(a==b&&b==c&&id==n) return true;
if(a>len||b>len||c>len) return false;
if(id>=n) return false;
if(dfs(a+l[id],b,c,id+)||dfs(a,b+l[id],c,id+)||dfs(a,b,c+l[id],id+)) return true;
return false;
}
int main()
{
cin>>n;
int sum=;
int maxn=-;
for(int i=; i<n; i++)
{
cin>>l[i];
sum+=l[i];
maxn=max(maxn,l[i]);
}
if((sum/*)!=sum||maxn>(sum/))
{
cout<<"no"<<endl;
return ;
}
int a,b,c;
a=b=c=;
len=sum/;
if(dfs(a,b,c,)) cout<<"yes"<<endl;
else cout<<"no"<<endl;
return ;
}
错误的搜索,之前学dfs的时候,习惯用循环,导致喜欢套用这个模板。。。。。。。。
#include<bits/stdc++.h>
using namespace std;
int n;
int a[];
int len;
bool vis[];
bool dfs(int sum,int index)
{
if(sum==len) return true;
if(sum>len) return false;
if(index>=n) return false;
if(dfs(sum+a[index],index+))
{
vis[index]=;
return true;
}
else
{
if(dfs(sum,index+)) return true;
}
return false;
}
int main()
{
cin>>n;
int sum=;
int maxn=-;
for(int i=; i<n; i++)
{
cin>>a[i];
sum+=a[i];
maxn=max(maxn,a[i]);
}
if((sum/*)!=sum||maxn>(sum/))
{
cout<<"no"<<endl;
return ;
}
len=sum/;
bool flag=false;
memset(vis,,sizeof(vis));
for(int i=; i<n; i++)
{
if(!vis[i])
{
flag=true;
if(!dfs(,i))
{
cout<<i<<endl;
for(int i=; i<n; i++)
cout<<vis[i]<<" ";
cout<<"no"<<endl;
return ;
}
flag=false;
}
} if(!flag) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
等边三角形---dfs的更多相关文章
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)
来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
随机推荐
- 常见文本框提示css技巧
很多时候会碰到那个的表单 一般我们做文字提醒功能时会在value处直接写上,现在总结一个比较好的方法直接上代码: html: <dl class="login_from"&g ...
- STL栈的应用之表达式求值
#include<iostream> #include<cstring> #include<cstdio> #include<stack> using ...
- NFC低功耗模式
- Emacs在RHEL 5上的安装和使用
1. install latest emacs xz -d emacs-24.3.tar.xz tar xvf emacs-24.3.tar ./configure make make install ...
- tomcat服务器开启gzip功能的方法
http://blog.csdn.net/wang_159369/article/details/8107163 tomcat5.0以后的版本是支持对输出内容进行gzip格式的压缩的.该功能默认是关闭 ...
- solr学习(一)
1.搭建solr环境 1.1 下载solr安装包,下载地址:http://lucene.apache.org/solr/mirrors-solr-latest-redir.html 下载并解压 1.2 ...
- 如何判断自己家的宽带是否有公网IP
1)点击链接 http://www.net.cn/static/customercare/yourIP.asp 抓取自己的IP地址 2)打开一个命令提示符窗口 tracert <刚才获取的IP& ...
- HDU 2647--Reward【拓扑排序】
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- JAVA变量的执行顺序
对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序以此是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: package ...
- C# 项目发布到IIS后不能用log4net写日志
在代码中正确配置了log4net后,IIS上仍然不能写日志的情况下,只需在写日志的目录添加 IIS_IUSRS 用户,并赋与读写权限即可.