等边三角形---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)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
随机推荐
- js 获得网页背景色和字体色
获得网页的背景色和字体颜色,方法如下: 思想: 通过取得颜色属性值得到的是 rgb 色,不是我们想要的,所以需要将 rgb 色装换为 十六进制色 ,首先获得rgb色 : 1 var rgb = doc ...
- Android触控屏幕Gesture(GestureDetector和SimpleOnGestureListener的使用教程) 分类:Androidandroid实例
1.当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Vie ...
- mysql的正则表达式
所谓正在表达式,就是通过模式去匹配一类字符串.MySQL支持的模式字符如下表所示: MySQL支持的模式字符 模式字符 含义 ^ 匹配字符串的开始部分 $ 匹配字符串的结束部分 . 匹配字符串中的任意 ...
- 【Networking】(转)一个非常好的epoll+线程池服务器Demo
(转)一个非常好的epoll+线程池服务器Demo Reply 转载自:http://zhangyafeikimi.javaeye.com/blog/285193 [cpp] /** 张亚霏修改 文件 ...
- magento 自定义订单前缀或订单起始编号
在magento里订单的起始号是从1000000001开始的,但有时你可能需要自定义该值的起始号如从20000000000开始 在Google上搜索了一番找到以下代码并完美解决问题,以此记录希望帮助其 ...
- [Functional Programming] Use Task/Async for Asynchronous Actions
We refactor a standard node callback style workflow into a composed task-based workflow. Original Co ...
- Discuz常见小问题-如何删除用户
用户-用户管理,直接拉到底部点搜索 切换到最后一页,然后勾选要删除的用户(最后一页就是最新注册的用户) 要勾选两个选项,删除过程比较长,不要中途退出,等待删除完毕 再次搜索用户就少一个了
- 在Eclipse中开发angularjs
当然了,直接用Eclipse开发,完全没问题.我只是需要加个智能感知,安装一个Eclipse插件. Eclipse菜单->Help->Eclipse Marketplace 安装完以后,项 ...
- STL - C++ 11的Lambda表达式(下)
关于lambda的基础知识,请参考上一篇的地址如下: http://www.cnblogs.com/davidgu/p/4825625.html 我们再举个STL使用Lambda来进行排序的例子,如下 ...
- Linux下全局符号覆盖问题
在windows上,默认情况下,动态库中的符号都是对外隐藏的,除非你显示的指出要导出哪些符号,否则外界是看不到的.但是linux下情况刚好相反,对静态变量和全局变量,linux下so里面的符号对外可见 ...