题意:有个为三个杯子(杯子没有刻度),体积为s,n,m,s=m+n,

刚开始只有体积为s的杯子装满可乐,可以互相倒,问你最少的次数使可乐均分,如果没有结果,输出-1;

分析:直接互相倒就完了,BFS模拟

注:写的很丑

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <set>
#include <queue>
#include <cstring>
using namespace std;
typedef long long LL;
const int maxn=+;
const int INF=0x3f3f3f3f;
int a[maxn][maxn][maxn];
struct asd
{
int x,y,z;
} o,t;
queue<asd>q;
int main()
{
int s,n,m;
while(~scanf("%d%d%d",&s,&n,&m),s)
{
if(s%)
{
printf("NO\n");
continue;
}
memset(a,-,sizeof(a));
a[s][][]=;
o.x=s,o.y=,o.z=;
while(!q.empty())q.pop();
q.push(o);
int ans=-;
while(!q.empty())
{
o=q.front();
q.pop();
int cnt=;
if(o.x==s/)cnt++;
if(o.y==s/)cnt++;
if(o.z==s/)cnt++;
if(cnt==)
{
ans=a[o.x][o.y][o.z];
break;
}
if(o.x)
{
if(o.y<n)
{
int k=n-o.y;
if(o.x<=k)t.y=o.y+o.x,t.x=;
else t.y=n,t.x=o.x-k;
t.z=o.z;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
if(o.z<m)
{
int k=m-o.z;
if(o.x<=k)t.z=o.z+o.x,t.x=;
else t.z=m,t.x=o.x-k;
t.y=o.y;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
}
if(o.y)
{
if(o.x<s)
{
int k=s-o.x;
if(o.y<=k)t.x=o.x+o.y,t.y=;
else t.x=s,t.y=o.y-k;
t.z=o.z;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
if(o.z<m)
{
int k=m-o.z;
if(o.y<=k)t.z=o.z+o.y,t.y=;
else t.z=m,t.y=o.y-k;
t.x=o.x;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
}
if(o.z)
{
if(o.y<n)
{
int k=n-o.y;
if(o.z<=k)t.y=o.y+o.z,t.z=;
else t.y=n,t.z=o.z-k;
t.x=o.x;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
if(o.x<s)
{
int k=s-o.x;
if(o.z<=k)t.x=o.z+o.x,t.z=;
else t.x=s,t.z=o.z-k;
t.y=o.y;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
}
}
if(ans==-)printf("NO\n");
else printf("%d\n",ans);
}
return ;
}

HDU 1495 非常可乐 BFS搜索的更多相关文章

  1. HDU 1495 非常可乐 BFS 搜索

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...

  2. HDU 1495 非常可乐 bfs 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 第三个杯子的盛水量可由前两个杯子得到,而前两个杯子状态总数在100*100以内,穷举可实现 #includ ...

  3. (step4.2.5)hdu 1495(非常可乐——BFS)

    题目大意:输入三个整数 a,b,c.   a : 可乐瓶的容量,b: 甲杯的容量 ,c: 乙杯的容量.问能否用这三个被来实现饮料的平分???如果可以输出倒饮料的次数, 否则输出NO 解题思路:BFS ...

  4. HDU 1495 非常可乐 BFS

    题目大意:中文题不说了. 题目思路:我有同学用GCD数论写出来的代码很简洁,但是很抱歉,数论蒟蒻,我觉得比赛的时候我没办法推出.如果用BFS的话思路很简单的,就是6方向广搜,只不过稍微麻烦点.具体看代 ...

  5. HDU - 1495 非常可乐 bfs互倒三杯水

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. BFS(倒水问题) HDU 1495 非常可乐

    题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...

  7. HDU 1495 非常可乐(数论,BFS)

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. 非常可乐---hdu 1495(BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 题意: 有3个杯子a b c:a=b+c:然后刚开始时只有a是满的,其它为空的,然后a b c三个之间互相 ...

  9. HDU 1495 非常可乐(BFS倒水问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101) ...

随机推荐

  1. H2嵌入式数据库的各种连接方式

    H2database是一款用java语言编写的开源数据库, 一般用作游戏的数据存储, 当然web项目也是可以用的, web项目也可以将该数据库 首先要安装H2数据库 http://www.h2data ...

  2. Weblogic12c安装与配置详解

    Weblogic是什么Weblogic的安装Weblogic创建域Weblogic管理域Weblogic的应用Weblogic是什么 Weblogic这是我入职以后第一次接触到的词汇,我很陌生,就从我 ...

  3. linux驱动系列之tftp(转)

    转自网页:http://blog.csdn.net/xingyu19871124/article/details/7315893 最近在将做的嵌入式项目移植到ARM开发板上,宿主机用的ubuntu11 ...

  4. 自己利用jQuery实现的win8图标浮动更新

    在学校参加网页设计大赛时,由于美工设计的刚好是metro风格的(其实她们从来没有用过win8也没有了解过),而本人也很喜欢win8的界面,于是就做了一个metro风格的作品.虽然最终没能获奖,但是觉得 ...

  5. Delphi XE5 android openurl(转)

    直接上代码: unit OpenViewUrl; interface // URLEncode is performed on the URL// so you need to format it p ...

  6. 1202: [HNOI2005]狡猾的商人 - BZOJ

    Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...

  7. BZOJ 4036 [HAOI2015] Set 解题报告

    首先我们不能一位一位的考虑,为什么呢? 你想想,你如果一位一位地考虑的话,那么最后就只有 $n$ 个数字,然而他给了你 $2^n$ 个数字,怎么看都不对劲呀.(我是因为这样子弄没过样例才明白的) 所以 ...

  8. PAT-乙级-1031. 查验身份证(15)

    1031. 查验身份证(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 一个合法的身份证号码由17位地区. ...

  9. (转)基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案

    在<基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案>一文中,提到尝试使用XMPP协议来实现即时通信.本文将对XMPP协议框架以及相关的C/S架构进行介绍,协议的底层实现不 ...

  10. fiddler插件开发step by step 1

    Fiddler 是优秀的抓包工具,有着众多的优秀插件.Fiddler 软件是由C#语言开发的,运行在.net Framework 框架之上,所以我们也可以使用vs来开发自己的Fiddler插件,下面就 ...