非常可乐---hdu 1495(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1495
题意:
有3个杯子a b c;a=b+c;然后刚开始时只有a是满的,其它为空的,然后a b c三个之间互相倒,假如说a倒入b中,只有当b满或a空时,才算倒一次;
a=4,b=1;c=3;
因为刚开始只有a中有;
先让a倒入c中3;step++;
c倒入b中1;step++;
b倒入a中1;step++;此时a和c中各有2;
代码如下:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
#include<cmath>
#define N 120
using namespace std; struct node
{
int a,b,c,step;
friend bool operator<(node a,node b)
{
return a.step>b.step;
}
};
int vis[N][N][N];
int BFS(int a,int b,int c)
{
node q,p;
priority_queue<node>Q;
memset(vis,,sizeof(vis));
p.a=a;p.b=;p.c=;p.step=;
vis[p.a][p.b][p.c]=;
Q.push(p);
while(!Q.empty())
{
q=Q.top();
Q.pop();
if((q.a==a/&&q.b==a/)||(q.b==a/&&q.c==a/)||(q.a==a/&&q.c==a/) )
return q.step;
if(q.a!=)//a->其他;
{
if(q.a<=b-q.b)//a->b;如果a中的全都能倒到b中;
{
p.a=;
p.b=a-q.c;
p.c=q.c;
p.step=q.step+;
}
else//a不能全到完;因为b满了;
{
p.a=a-b-q.c;
p.b=b;
p.c=q.c;
p.step=q.step+;
}
if(vis[p.a][p.b][p.c]==)
{
vis[p.a][p.b][p.c]=;
Q.push(p);
} //以下同理;
if(q.a<=b-q.c)//a->c;如果a中的全都能倒到c中;
{
p.a=;
p.b=q.b;
p.c=a-q.b;
p.step=q.step+;
}
else//a不能全到完;因为c满了;
{
p.a=a-c-q.b;
p.b=q.b;
p.c=c;
p.step=q.step+;
}
if(vis[p.a][p.b][p.c]==)
{
vis[p.a][p.b][p.c]=;
Q.push(p);
}
} if(q.b!=)//b->其他;
{
if(q.b<=a-q.a)//b->a;如果b中的全都能倒到a中;
{
p.a=a-q.c;
p.b=;
p.c=q.c;
p.step=q.step+;
} if(vis[p.a][p.b][p.c]==)
{
vis[p.a][p.b][p.c]=;
Q.push(p);
} //以下同理;
if(q.b<=c-q.c)//b->c;如果b中的全都能倒到c中;
{
p.a=q.a;
p.b=;
p.c=a-q.a;
p.step=q.step+;
}
else//b不能全到完;因为c满了;
{
p.a=q.a;
p.b=a-q.a-c;
p.c=c;
p.step=q.step+;
}
if(vis[p.a][p.b][p.c]==)
{
vis[p.a][p.b][p.c]=;
Q.push(p);
}
} if(q.c!=)//c->其他;
{
if(q.c<=a-q.a)//c->a;如果c中的全都能倒到a中;
{
p.a=a-q.b;
p.b=q.b;
p.c=;
p.step=q.step+;
} if(vis[p.a][p.b][p.c]==)
{
vis[p.a][p.b][p.c]=;
Q.push(p);
} //以下同理;
if(q.c<=b-q.b)//c->b;如果c中的全都能倒到b中;
{
p.a=q.a;
p.b=a-q.a;
p.c=;
p.step=q.step+;
}
else//c不能全到完;因为b满了;
{
p.a=q.a;
p.b=b;
p.c=a-q.a-b;
p.step=q.step+;
}
if(vis[p.a][p.b][p.c]==)
{
vis[p.a][p.b][p.c]=;
Q.push(p);
}
}
}
return -;
} int main()
{
int a,b,c,ans;
while(scanf("%d%d%d",&a,&b,&c),a+b+c)
{
if(a%==)
{
printf("NO\n");
continue;
}
else
{
ans=BFS(a,b,c);
if(ans==-)
printf("NO\n");
else
printf("%d\n",ans);
}
}
return ;
}
非常可乐---hdu 1495(BFS)的更多相关文章
- hdu 1495(BFS)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU - 1495 bfs [kuangbin带你飞]专题一
模拟倒水的过程,每次可以把第i个杯子的水向第j个杯子里面倒,这可能出现新的状态,不停的更新状态,指导某两个杯子的水等于S/2说明找到答案,如果所有状态搜索完毕仍然不能均分,则退出. 注意:如果S是奇数 ...
- 非常可乐 HDU - 1495
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但see ...
- kuangbin专题 专题一 简单搜索 非常可乐 HDU - 1495
题目链接:https://vjudge.net/problem/HDU-1495 题意:有两个空杯(分别是N升和M升)和一罐满的可乐S升,S = N + M,三个容器可以互相倾倒,如果A倒入B,只有两 ...
- BFS(倒水问题) HDU 1495 非常可乐
题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...
- 【BFS】HDU 1495
直达–> HDU 1495 非常可乐 相似题联动–>POJ 3414 Pots 题意:中文题,不解释. 思路:三个杯子倒来倒去,最后能让其中两个平分即可.可能性六种.判定的时候注意第三个杯 ...
- hdu 4531 bfs(略难)
题目链接:点我 第一次不太清楚怎么判重,现在懂了,等下次再做 /* *HDU 4531 *BFS *注意判重 */ #include <stdio.h> #include <stri ...
- 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 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...
随机推荐
- python卸载或者安装时提示There is a problem with this Windows Installer package.A program required for this install to complete could not be run. Contact your support personnel or package vendor
1.卸载时报这个错,先进行下修复,再执行卸载: 2.安装时报这个错,安装的过程中,没有取得管理员的权限. Msi格式的文件,点右键后,也没有“以管理员身份运行”的菜单项,那怎么办呢?你可以点“开始”菜 ...
- [Git] 解决 insufficient permission for adding an object to repository database
[环境] OS: CentOS 6.5 Git: 1.7.1 [症状描述] Git 中心仓库路径 ~/project.git,克隆库路径 ~/project.clone,克隆库中包含一个文件 ~/pr ...
- Python中常见的字符串小笔试题
1.获取实现两个字符串中最大的公共子串 思路: 1.比较两个字符串的长度 2.获取较短字符串的所有子串 3.使用__contains__函数进行比较 4.把子串当做键,子串长度作为值,存入字典, ...
- Stay hungry, Stay foolish 的原义
乔布斯在斯坦福大学毕业演讲中说过,他最喜欢的一句话叫做"Stay hungry, Stay foolish". "Stewart和他的人出了好几期<地球产品目录&g ...
- YII2 model 字段验证提示 Unknown scenario: update
意思是 update 场景不存在,也就是 定义的 rules 中没有该规则: /** * @inheritdoc * 验证规则 */ public function rules() { return ...
- 《转载》图解Tomcat类加载机制
本文转载自http://www.cnblogs.com/xing901022/p/4574961.html 说到本篇的tomcat类加载机制,不得不说翻译学习tomcat的初衷. 之前实习的时候学习j ...
- <转>Python: __init__.py 用法
转自 http://www.cnblogs.com/BeginMan/p/3183629.html python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录 ...
- WP8.1学习系列(第二十六章)——控件模板
在本文中 自定义控件模板示例 指定控件的可视结构. 指定控件的可视行为 使用工具轻松处理主题 控件和辅助功能 了解有关控件默认模板的详细信息 控件模板中的主题资源 相关主题 在 XAML 框架中,如果 ...
- Firefox --- 火狐浏览器下载
http://www.firefox.com.cn/download/
- sencha touch list(列表) item(单行)单击事件触发顺序
测试代码如下 Ext.define('app.view.new.List', { alternateClassName: 'newList', extend: 'app.view.util.MyLis ...