HDU 1495 非常可乐 BFS
题目大意:中文题不说了。
题目思路:我有同学用GCD数论写出来的代码很简洁,但是很抱歉,数论蒟蒻,我觉得比赛的时候我没办法推出。如果用BFS的话思路很简单的,就是6方向广搜,只不过稍微麻烦点。具体看代码吧。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#include<iostream>
#define MAX 115
using namespace std; int vis[MAX][MAX][MAX],a,b,c,k; bool check(int s,int n,int m)
{
if(!vis[s][n][m] && s<=c && n<=a && m<=b && s>= && n>= && m>=)
return true;
return false;
} struct node
{
int s,n,m,step;
}; int BFS()
{
node now,next;
now.s=c;
now.n=;
now.m=;
now.step=;
queue<node>Q;
Q.push(now);
vis[c][][]=;
while(!Q.empty())
{
now=Q.front();
Q.pop();
if(now.s==k && now.m==k)
{
return now.step;
}
for(int i=;i<;i++)
{
if(i==)//s->n
{
if(now.s==)
continue;
if(now.s >= (a-now.n))
{
next.s=now.s-(a-now.n);
next.n=a;
} else
{
next.s=;
next.n=now.n+now.s;
}
next.m=now.m;
} else if(i==)//n->m
{
if(now.n==)
continue;
if(now.n >= (b-now.m))
{
next.n=now.n-(b-now.m);
next.m=b;
} else
{
next.n=;
next.m=now.m+now.n;
}
next.s=now.s;
} else if(i==)//m->n
{
if(now.m==)
continue;
if(now.m >= (a-now.n))
{
next.m=now.m-(a-now.n);
next.n=a;
} else
{
next.m=;
next.n=now.n+now.m;
}
next.s=now.s;
} else if(i==)//s->m
{
if(now.s==)
continue;
if(now.s >= (b-now.m))
{
next.s=now.s-(b-now.m);
next.m=b;
} else
{
next.s=;
next.m=now.m+now.s;
}
next.n=now.n;
} else if(i==)//n->s
{
if(now.n==)
continue;
if(now.n >= (c-now.s))
{
next.n=now.n-(c-now.s);
next.s=c;
} else
{
next.n=;
next.s=now.s+now.n;
}
next.m=now.m;
} else if(i==)//m->s
{
if(now.m==)
continue;
if(now.m >= (c-now.s))
{
next.m=now.m-(c-now.s);
next.s=c;
} else
{
next.m=;
next.s=now.s+now.m;
}
next.n=now.n;
} if(check(next.s,next.n,next.m))
{
vis[next.s][next.n][next.m]=;
next.step=now.step+;
Q.push(next);
}
}
}
return -;
} int main()
{
while(scanf("%d%d%d",&c,&a,&b),a+b+c)
{
if(a > b)
swap(a,b);
if(c%!=)
{
printf("NO\n");
continue;
} else
{
k=c/;
memset(vis,,sizeof(vis));
int ans=BFS();
if(ans==-)
printf("NO\n");
else
printf("%d\n",ans);
}
}
return ;
}
HDU 1495 非常可乐 BFS的更多相关文章
- HDU 1495 非常可乐 BFS 搜索
http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...
- HDU 1495 非常可乐 bfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=1495 第三个杯子的盛水量可由前两个杯子得到,而前两个杯子状态总数在100*100以内,穷举可实现 #includ ...
- (step4.2.5)hdu 1495(非常可乐——BFS)
题目大意:输入三个整数 a,b,c. a : 可乐瓶的容量,b: 甲杯的容量 ,c: 乙杯的容量.问能否用这三个被来实现饮料的平分???如果可以输出倒饮料的次数, 否则输出NO 解题思路:BFS ...
- HDU 1495 非常可乐 BFS搜索
题意:有个为三个杯子(杯子没有刻度),体积为s,n,m,s=m+n, 刚开始只有体积为s的杯子装满可乐,可以互相倒,问你最少的次数使可乐均分,如果没有结果,输出-1; 分析:直接互相倒就完了,BFS模 ...
- HDU - 1495 非常可乐 bfs互倒三杯水
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- BFS(倒水问题) HDU 1495 非常可乐
题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...
- HDU 1495 非常可乐(数论,BFS)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 非常可乐---hdu 1495(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1495 题意: 有3个杯子a b c:a=b+c:然后刚开始时只有a是满的,其它为空的,然后a b c三个之间互相 ...
- HDU 1495 非常可乐(BFS倒水问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101) ...
随机推荐
- 移动端Bug管理工具——Bugtags
Bugtags介绍 产品说明 Bugtags是为改善移动产品质量而专门打造的测试平台产品. 产品功能 SDK集成简单 一行代码极速集成,完全不影响原有程序结构. 所见即所得提交问题 一键截屏,使用标签 ...
- ActiveMQ in Action(4) - Security
关键字: activemq 2.4 Security ActiveMQ支持可插拔的安全机制,用以在不同的provider之间切换.2.4.1 Simple Authentication Plug ...
- OMCS开发手册(02) -- 多媒体连接器
OMCS开发手册(01) -- 多媒体设备管理器 一文,我们从Owner的角度详细描述了多媒体设备管理器的使用,本文我们将站在Guest的角度,描述OMCS中另一类组件/控件:多媒体连接器.多媒体连接 ...
- POCO系列之——什么是POCO
做过JAVA的朋友应该对这个比较熟悉了在JAVA中叫POJO,POCO是Plain Old CLR Object的缩写.所谓的POCO就是那些不包括INSERT.ADD.DEL等数据持久化操作的以及不 ...
- 推荐学习c语言的几个开源项目
1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连 ...
- Matlab - 矩阵元素引用
>> A = [ ; ; ] A = 1. 选择第m行n列的元素 >> A(,) ans = 2. 选择第i列所有元素 >> A(:,) ans = 3. 选择第j ...
- 洛谷-三连击(升级版)-BOSS战-入门综合练习1
题目描述 Description 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成A:B:C的比例,试求出所有满足条件的三个三位数,若无解,输出“No!!!”. 输入输出格 ...
- setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientific Linux
This is a guide on setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientif ...
- 根据NSString字符串长度自动改变UILabel的frame
相信大家都遇到过这种需求.如果一个不慎,容易做成这个模样: 话不多说,上代码. 1.首先,设置UILabel的相关属性 UILabel *tmpLabel = [[UILabel alloc] ini ...
- Openlayer 3 的画图测量面积
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...