链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1495

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7620    Accepted Submission(s): 3050

Problem Description
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的次数,如果不能输出"NO"。
 
Input
三个整数 : S 可乐的体积 , N 和 M是两个杯子的容量,以"0 0 0"结束。
 
Output
如果能平分的话请输出最少要倒的次数,否则输出"NO"。
 
Sample Input
7 4 3
4 1 3
0 0 0
 
Sample Output
NO
3

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue> using namespace std; #define maxn 110 struct node
{
int a, b, c, step;
}; int S, N, M, vis[maxn][maxn][maxn]; int BFS()
{
node p, q;
p.a=S, p.b=, p.c=, p.step=; memset(vis, , sizeof(vis));
vis[S][][] = ; queue<node>Q;
Q.push(p); while(Q.size())
{
p = Q.front(), Q.pop(); if((p.a==S/&&p.b==S/) || (p.b==S/&&p.c==S/) || (p.a==S/&&p.c==S/)) return p.step; for(int i=; i<; i++)
{
if(i==) /// a->b
{
if(p.a+p.b>N)
{
q.a = p.a+p.b-N;
q.b = N;
}
else
{
q.a = ;
q.b = p.a+p.b;
}
q.c = p.c;
}
else if(i==) /// a->c
{
if(p.a+p.b>M)
{
q.a = p.a+p.c-M;
q.c = M;
}
else
{
q.a = ;
q.c = p.a+p.c;
}
q.b = p.b;
}
else if(i==) /// b->a
{
if(p.b+p.a>S)
{
q.b = p.b+p.a-S;
q.a = S;
}
else
{
q.b = ;
q.a = p.b+p.a;
}
q.c = p.c;
}
else if(i==) /// b->c
{
if(p.b+p.c>M)
{
q.b = p.b+p.c-M;
q.c = M;
}
else
{
q.b = ;
q.c = p.b+p.c;
}
q.a = p.a;
}
else if(i==) /// c->a
{
if(p.c+p.a>S)
{
q.c = p.c+p.a-S;
q.a = S;
}
else
{
q.c = ;
q.a = p.c+p.a;
}
q.b = p.b;
}
else if(i==) /// c->b
{
if(p.c+p.b>N)
{
q.c = p.c+p.b-N;
q.b = N;
}
else
{
q.c = ;
q.b = p.c+p.b;
}
q.a = p.a;
}
q.step = p.step+;
if(!vis[q.a][q.b][q.c])
{
vis[q.a][q.b][q.c]=;
Q.push(q);
}
}
}
return -;
} int main()
{
while(scanf("%d%d%d", &S, &N, &M), S+N+M)
{
if(S%)
{
printf("NO\n");
continue;
} int ans = BFS();
if(ans==-)
printf("NO\n");
else
printf("%d\n", ans); }
return ;
}

(广搜)可口可乐 -- hdu -- 1495的更多相关文章

  1. hdu 1495 非常可乐 (广搜)

    题目链接 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶 ...

  2. HDU 1495 非常可乐 (只是转了个弯的广搜题)

    N - 非常可乐 =========================================================================================== ...

  3. hdu 5025 Saving Tang Monk 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...

  4. hdu 5094 Maze 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...

  5. Combine String HDU - 5707 dp or 广搜

    Combine String HDU - 5707 题目大意:给你三个串a,b,c,问a和b是不是恰好能组成c,也就是a,b是不是c的两个互补的子序列. 根据题意就可以知道对于c的第一个就应该是a第一 ...

  6. HDU 5652(二分+广搜)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/128683#problem/E 题目大意:给定一只含有0和1的地图,0代表可以走的格子,1代表不能走的格 子.之 ...

  7. hdu 1242:Rescue(BFS广搜 + 优先队列)

    Rescue Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  8. hdu 1195:Open the Lock(暴力BFS广搜)

    Open the Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  9. HDU 1253 (简单三维广搜) 胜利大逃亡

    奇葩!这么简单的广搜居然爆内存了,而且一直爆,一直爆,Orz 而且我也优化过了的啊,尼玛还是一直爆! 先把代码贴上睡觉去了,明天再来弄 //#define LOCAL #include <ios ...

随机推荐

  1. week2--线性表

    一.PTA实验作业 题目1:顺序表删除重复元素(6-3) 设计思路 代码截图 PTA提交列表说明 编译错误:写'->'符号的时候总是漏掉'>'; 写'!='符号的时候漏写'!'; 解决方法 ...

  2. 十三、jdk命令之Java内存之本地内存分析神器:NMT 和 pmap

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  3. [转]JavaScript RegExp 对象参考手册

    JavaScript RegExp 对象参考手册 RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 直接量语法 /pattern/attributes 创建 ...

  4. Hive的基本介绍

    Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的.那么,到底什么是Hive,我们先看看Hive官网Wiki是如何介绍Hive的(https://cw ...

  5. Microsoft SQL Server on Linux破解 2G内存限制

    首先,贴上微软官方安装方法,大家按照官方的操作就行. 微软官方安装方法 相信很多同学遇到一个问题就是: sqlservr: This program requires a machine with a ...

  6. M3截止阶段小结

    python知识点总结1.copy模块中深浅拷贝copy() deepcopy()2.__new__ 方法参数    def __new__(cls, *args, **kwargs):        ...

  7. thinkphp5中Indirect modification of overloaded element of XXX has no effect的解决办法

    最近在使用Thinkphp5做foreach循环嵌套的时候报错:Indirect modification of overloaded element of XXX has no effect,网上搜 ...

  8. OpenCL 三种内存对象的使用

    ▶ 包括带有 CL_MEM_READ_ONLY,CL_MEM_WRITE_ONLY,CL_MEM_READ_WRITE 标识的显示拷贝(函数 clEnqueueWriteBuffer 和 clEnqu ...

  9. Android Studio中由于gradle插件版本和gradle版本对应关系导致的编译失败的问题

    今天在Android Studio中导入新项目,import之后编译报错,报错信息基本都是和版本相关,查询gradle版本相关知识,了解到gradle插件版本和gradle版本有相应的匹配关系,对应如 ...

  10. XE7 update1