HDU1495(bfs)
非常可乐
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10349 Accepted Submission(s):
4143
毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且
S==N+M,101>S>0,N>0,M>0) 。聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的次数,如果不能输出"NO"。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<algorithm>
using namespace std;
const int MAX=105;
int s,n,m;
struct node{
int s,n,m,t;
};
int vis[MAX][MAX][MAX];
int bfs(){
node now,next;
queue<node>q;
while(!q.empty())
q.pop();
now.s=s;now.n=now.m=now.t=0;
memset(vis,0,sizeof(vis));
vis[s][0][0]=1;
q.push(now);
while(!q.empty()){
now=q.front(),q.pop();
if((now.n==now.m&&now.s==0)||(now.n==now.s&&now.m==0)||(now.s==now.m&&now.n==0))
return now.t;
int tmp;
if( now.s!=0 ){
if( now.n!=n ){
tmp=min( now.s,n-now.n );
next=now;
next.t=now.t+1;
next.s-=tmp;
next.n+=tmp;
if( vis[next.s][next.n][next.m]==0/*vis[ next ]==0*/ ){
vis[next.s][next.n][next.m]=1;//vis[ next ]=1;
q.push(next);
}
}
if( now.m!=m ){
tmp=min( now.s,m-now.m );
next=now;
next.t=now.t+1;
next.s-=tmp;
next.m+=tmp;
if( vis[next.s][next.n][next.m]==0/*vis[ next ]==0*/ ){
vis[next.s][next.n][next.m]=1;//vis[ next ]=1;
q.push( next );
}
}
}// 1 to (2 or 3)
if(now.n!=0){
tmp=now.n;
next=now;
next.t=now.t+1;
next.s+=tmp;
next.n=0;
if( vis[next.s][next.n][next.m]==0/*vis[ next ]==0*/ ){
vis[next.s][next.n][next.m]=1;//vis[ next ]=1;
q.push( next );
}
if( now.m!=m ){
tmp=min(m-now.m,now.n);
next=now;
next.t=now.t+1;
next.m+=tmp;
next.n-=tmp;
if(vis[next.s][next.n][next.m]==0/*vis[ next ]==0*/){
vis[next.s][next.n][next.m]=1;//vis[ next ]=1;
q.push( next );
}
}
}//2 to( 1 or 3 )
if( now.m!=0 ){
tmp=now.m;
next=now;
next.t=now.t+1;
next.m=0;
next.s+=tmp;
if( vis[next.s][next.n][next.m]==0/*vis[ next ]==0*/ ){
vis[next.s][next.n][next.m]=1;//vis[ next ]=1;
q.push( next );
}
if( now.n!=n ){
tmp=min( n-now.n,now.m );
next=now;
next.t=now.t+1;
next.n+=tmp;
next.m-=tmp;
if( vis[next.s][next.n][next.m]==0/*vis[ next ]==0*/ ){
vis[next.s][next.n][next.m]=1;//vis[ next ]=1;
q.push( next );
}
}
}
}
return -1;
}
int main(){
while( scanf("%d%d%d",&s,&n,&m),s+n+m )
{
if( s%2==1 ){
printf("NO\n");
continue;
}
if( n==m ){
printf("1\n");
continue;
}
int ans=bfs();
if( ans!=-1 )
printf("%d\n",ans);
else
printf("NO\n");
}
return 0;
}
这是一个经典的广搜题,开始我是用java编写的,但是总是写不对,后来询问了一下老师,老师说要拷贝now里面的数据再去倒;这个地方有几个小细节大家应该要注意。这里基本上采用了暴力列举,把六种情况列举了出来。先是从1倒到或2,把他们倒满,再是从2倒到3或者是1把2的中的水倒完。3倒到1或者2,把3中的水倒完;
HDU1495(bfs)的更多相关文章
- hdu1495 bfs搜索、模拟
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但see ...
- HDU-1495 非常可乐(BFS)
广搜的灵活应用题: 非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu1495(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题意:有三个杯子,开始时第一个杯子装满水(体积为a),倒来倒去,得到其中2个杯里的水的体积都为a ...
- 非常可乐(杭电hdu1495)bfs
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- hdu1495(经典bfs,平分水问题)
思路:搜索题,第一次做这种类型的题目吧,一开始表示不怎么明白题意所说的东东.其实就是要你判断可乐能不能被平分........ 有六种状态,从a瓶到b瓶,a-->c b-->a b- ...
- HDU1495 非常可乐 —— BFS + 模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 非常可乐 Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU1495 非常可乐(BFS/数论)
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但see ...
- hdu1495 倒水bfs
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1495/ 题意:给定三个杯子S,M,N,满足S=M+N,现在要求用最短的次数将S杯中的饮倒平分到两个杯子中.我们首 ...
- poj3414(bfs)
题目链接:http://poj.org/problem?id=3414 题意:给你两个容器 A B 问是否能够经过有限的步骤倒水,得到容量为 C 的水,输出最小的步数,同时输出每一步的操作.如果不能 ...
随机推荐
- linux下查看防火墙当前状态,开启关闭等
从配置菜单关闭防火墙是不起作用的,索性在安装的时候就不要装防火墙 查看防火墙状态: /etc/init.d/iptables status 暂时关闭防火墙: /etc/init.d/iptables ...
- hadoop2.2原理: 序列化浅析
序列化是指将一个对象编码成字节流,之后从字节流中重构对象: 为什么需要序列化? 答:用序列化接口可以将对象实例从存储到本地文件或者传送到网络的另一端的节点上: 序列化过程: 序列化的三种主要用途: 1 ...
- Azure Site Recovery 通过一键式流程将虚拟机故障转移至 Azure虚拟机
Ruturaj Dhekane 云 + Enterprise 项目经理 现在,AzureSite Recovery可以通过其"灾难恢复至 Azure"功能保护您的工作负荷,并 ...
- Azure 媒体服务支持 DASH 实时传送流
Kilroy Hughes Azure媒体服务数字媒体架构师 本文重点介绍 Azure 媒体服务支持的 DASH 实时传送流功能,同时阐述如何利用这些功能将实时和点播自适应流传送至 Web 浏览器 ...
- 【转】基本数据持久性(一) 使用plist保存和读取数据
原文网址:http://www.it165.net/pro/html/201309/7170.html 想保存成绩.记录得分.保存账号密码等等?数据持久性可以做到这一点!这篇文章通过简单的程序,来分享 ...
- 【转】Xcode重构功能怎么用我全告诉你
原文网址:http://www.cocoachina.com/ios/20160127/15097.html 你会经常需要重构你的代码,让它有更好的结构,可读性或者提高可维护性.Xcode作为IDE其 ...
- sublimelinter-jshinter
--- ocalhost:~ nihao$ sudo npm install jshint -gPassword:/usr/local/bin/jshint -> /usr/local/lib/ ...
- wuzhicms后台菜单的添加
红色部分都是从菜单管理处添加而来.只有少数是自定义的. 开发一个模块,首先就是菜单的管理.而,不需要的功能也可以在在菜单管理处隐藏或删除. 添加菜单:
- 【解决】HDFS HA无法自动切换问题
[解决]HDFS HA无法自动切换问题 原因: 最早设置为root互相登录,可是zkfc服务是hdfs账号运行的,没有权限访问到root的id_rsa文件.更改为hdfs账号免密钥登录恢复正常. ...
- 成都Uber优步司机奖励政策(2月21日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...