HDU 1495 非常可乐
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103711#problem/M
/*BFS简单题
链接地址: http://acm.hdu.edu.cn/showproblem.php?pid=1495
思路:预处理m < n < s,以后处理方便点
初始状态,m,n杯中可乐体积为0,s杯中体积为s;
然后分六种情况:
1, s 倒 m
2, s 倒 n
3, m 倒 n
4, m 倒 s
5, n 倒 m
6, n 倒 s
直到n,s杯中的可乐能等分(此时m杯中体积为0)为止,若不能等分,则输出 NO
*/
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define maxn 101
bool visited[maxn][maxn];
int m,n,s,si,sj;
struct node
{
int x,y,all,t; //x,y,all分别表示m,n,s杯中可乐的体积,t表示倒了多少次
};
void BFS(){ queue<node> que;
memset(visited,false,sizeof(visited));
node p,q;
p.x = ,p.y = ,p.t = ,p.all = s;
que.push(p);
visited[p.x][p.y] = true; while(!que.empty()){
p = que.front();
que.pop();
if(p.y == p.all && p.y == s/)
{
printf("%d\n",p.t);
return;
} if(p.all+p.x > m) //s倒m
{
q.x = m,q.y = p.y,q.all = p.all+p.x-m,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
}
else
{
q.x = p.all+p.x,q.y = p.y,q.all = ,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
} if(p.all+p.y > n) //s倒n
{
q.x = p.x, q.y = n, q.all = p.all+p.y-n,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
}
else
{
q.x = p.x,q.y = p.all+p.y,q.all = ,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
} if(p.x+p.y > n) //m倒n
{
q.x = p.x+p.y-n,q.y = n,q.all = p.all,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
}
else
{
q.x = ,q.y = p.x+p.y,q.all = p.all,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
} q.all = p.all+p.x,q.x = ,q.y = p.y,q.t = p.t+; //m倒s
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true; if(p.x+p.y > m)
{
q.y = p.y+p.x-m,q.x = m,q.all = p.all,q.t = p.t+;//n倒m
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
}
else
{
q.x = p.x+p.y,q.y = ,q.all = p.all,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
} q.all = p.all+p.y,q.x = p.x,q.y = ,q.t = p.t+; //n倒s
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
}
printf("NO\n");
}
int main()
{
//freopen("1013.txt","r",stdin);
while(scanf("%d%d%d",&s,&m,&n) && (s||m||n))
{
if(s%)
{
printf("NO\n");
continue;
}
if(m > n) swap(m,n);
BFS();
}
return ;
}
HDU 1495 非常可乐的更多相关文章
- 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 题目就不说了, 说说思路! 倒可乐 无非有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 ...
- HDU 1495 非常可乐(BFS倒水问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101) ...
- HDU - 1495 非常可乐 【BFS】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1495 思路 首先 如果可乐的体积 是奇数 那么是无解的 然后 如果能够得到两杯 都是一般容量的可乐 那 ...
- HDU 1495 非常可乐 (只是转了个弯的广搜题)
N - 非常可乐 =========================================================================================== ...
- HDU 1495 非常可乐【BFS/倒水问题】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- HDU - 1495 非常可乐 bfs互倒三杯水
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- ecshop 变量表
get_goods_info($goods_id) 商品详情 get_sales_count($goods_id) 商品销量 get_promote_goods() 参与促销商品 Mobile
- lamp环境搭建(ubuntu)
系统:Ubuntu14.04 方法一.最简单的在线安装 (参考网址:http://os.51cto.com/art/201307/405333.htm) 具体过程: [1]打开终端,执行命令 # su ...
- php Hash Table(四) Hash Table添加和更新元素
HashTable添加和更新的函数: 有4个主要的函数用于插入和更新HashTable的数据: int zend_hash_add(HashTable *ht, char *arKey, uint n ...
- tamper绕WAF详解
0x00 背景 sqlmap中的tamper脚本来对目标进行更高效的攻击. 由于乌云知识库少了sqlmap-tamper 收集一下,方便学习. 根据sqlmap中的tamper脚本可以学习过绕过一些技 ...
- Python之路【第十六篇续】Django进阶篇
Django请求生命周期 首先:对于所有的web框架来说本质就是一个socket服务端,浏览器是socket客户端 路由系统 在Django的urls中我们可以根据一个URL对应一个函数名来定义路由规 ...
- 用eclipse导入jar包并使其在一个文件夹下
步骤如下:1.右键点击你需要添加jar包的项目. 2.选择“Properties”. 3.然后选择对话框中的“Java Build Path”. 4.选择“Libraries”选项卡,然后点击右边的“ ...
- 高效率http页面优化法则一【JS对DOM的操作】
高效http页面优化法则一很多人都认为JS的效率太慢了,都不愿意用js来实现相对困难一点的程序逻辑.在这里我要说的是其实js的效率并不慢,慢的是DOM,如果操作好DOM,你的js效率将提高接近千倍(这 ...
- ASP 编码转换(乱码问题解决)
ASP 编码转换(乱码问题解决) 输出前先调用Conversion函数进行编码转换,可以解决乱码问题. 注,“&参数&”为ASP的连接符,这里面很多是直接调用的数据库表字段,实际使用请 ...
- 清北学堂模拟day4 业务办理
[问题描述]在银行柜台前,有 n 个顾客排队办理业务. 队伍中从前往后,第 i 位顾客办理业务需要ti 分钟时间. 一位顾客的等待时间定义为:队伍中在他之前的所有顾客和他自己的办理业务时间的总和.第 ...
- 2013长沙 G Graph Reconstruction (Havel-Hakimi定理)
Graph Reconstruction Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Let there ...