HDU 1495 非常可乐 BFS
题目大意:中文题不说了。
题目思路:我有同学用GCD数论写出来的代码很简洁,但是很抱歉,数论蒟蒻,我觉得比赛的时候我没办法推出。如果用BFS的话思路很简单的,就是6方向广搜,只不过稍微麻烦点。具体看代码吧。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#include<iostream>
#define MAX 115
using namespace std; int vis[MAX][MAX][MAX],a,b,c,k; bool check(int s,int n,int m)
{
if(!vis[s][n][m] && s<=c && n<=a && m<=b && s>= && n>= && m>=)
return true;
return false;
} struct node
{
int s,n,m,step;
}; int BFS()
{
node now,next;
now.s=c;
now.n=;
now.m=;
now.step=;
queue<node>Q;
Q.push(now);
vis[c][][]=;
while(!Q.empty())
{
now=Q.front();
Q.pop();
if(now.s==k && now.m==k)
{
return now.step;
}
for(int i=;i<;i++)
{
if(i==)//s->n
{
if(now.s==)
continue;
if(now.s >= (a-now.n))
{
next.s=now.s-(a-now.n);
next.n=a;
} else
{
next.s=;
next.n=now.n+now.s;
}
next.m=now.m;
} else if(i==)//n->m
{
if(now.n==)
continue;
if(now.n >= (b-now.m))
{
next.n=now.n-(b-now.m);
next.m=b;
} else
{
next.n=;
next.m=now.m+now.n;
}
next.s=now.s;
} else if(i==)//m->n
{
if(now.m==)
continue;
if(now.m >= (a-now.n))
{
next.m=now.m-(a-now.n);
next.n=a;
} else
{
next.m=;
next.n=now.n+now.m;
}
next.s=now.s;
} else if(i==)//s->m
{
if(now.s==)
continue;
if(now.s >= (b-now.m))
{
next.s=now.s-(b-now.m);
next.m=b;
} else
{
next.s=;
next.m=now.m+now.s;
}
next.n=now.n;
} else if(i==)//n->s
{
if(now.n==)
continue;
if(now.n >= (c-now.s))
{
next.n=now.n-(c-now.s);
next.s=c;
} else
{
next.n=;
next.s=now.s+now.n;
}
next.m=now.m;
} else if(i==)//m->s
{
if(now.m==)
continue;
if(now.m >= (c-now.s))
{
next.m=now.m-(c-now.s);
next.s=c;
} else
{
next.m=;
next.s=now.s+now.m;
}
next.n=now.n;
} if(check(next.s,next.n,next.m))
{
vis[next.s][next.n][next.m]=;
next.step=now.step+;
Q.push(next);
}
}
}
return -;
} int main()
{
while(scanf("%d%d%d",&c,&a,&b),a+b+c)
{
if(a > b)
swap(a,b);
if(c%!=)
{
printf("NO\n");
continue;
} else
{
k=c/;
memset(vis,,sizeof(vis));
int ans=BFS();
if(ans==-)
printf("NO\n");
else
printf("%d\n",ans);
}
}
return ;
}
HDU 1495 非常可乐 BFS的更多相关文章
- 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 ...
- (step4.2.5)hdu 1495(非常可乐——BFS)
题目大意:输入三个整数 a,b,c. a : 可乐瓶的容量,b: 甲杯的容量 ,c: 乙杯的容量.问能否用这三个被来实现饮料的平分???如果可以输出倒饮料的次数, 否则输出NO 解题思路:BFS ...
- HDU 1495 非常可乐 BFS搜索
题意:有个为三个杯子(杯子没有刻度),体积为s,n,m,s=m+n, 刚开始只有体积为s的杯子装满可乐,可以互相倒,问你最少的次数使可乐均分,如果没有结果,输出-1; 分析:直接互相倒就完了,BFS模 ...
- HDU - 1495 非常可乐 bfs互倒三杯水
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 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 题意: 有3个杯子a b c:a=b+c:然后刚开始时只有a是满的,其它为空的,然后a b c三个之间互相 ...
- HDU 1495 非常可乐(BFS倒水问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101) ...
随机推荐
- javascript基础(四)语句
原文http://pij.robinqu.me/ for/in语句也使用for关键字,但它是和常规的for循环完全不同的一类循环.语法: for (variable in object) statem ...
- Android ListView 无法响应onItemClick事件
当在布局文件中加入了Button.ImageButton.CheckBox.RadioButton等控件(也就是Button或者Checkable的子类控件)的时候,listView是无法响应onIt ...
- java中修饰符及其用法
1. java中的修饰符 a. 权限修饰符 private,默认的,protected,public b. 状态修饰符 static,final c. 抽象修饰符 abstract 2. 类修饰符 p ...
- Gentoo安装详解(二)-- 编译内核
编译内核: 安装内核源码: 选择内核:如gentoo-sources emerge gentoo-sources ls -l /usr/src/linux 手动编译内核: cd /usr/src/li ...
- Openjudge-计算概论(A)-单词倒排
描述: 编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔. 输入输入为一个字符串(字符串长度至多为100).输出输出为按要求排续后的字符 ...
- jq选择器对象筛选
1.选择对象 1).基本 ·#id 根据给定的ID匹配一个元素.例如:$("#id")·element 根据给定的元素名匹配所有元素.例如:$("div")·. ...
- spring 集成mongo配置
spring继承Mongo使用的是spring-data. 如果需要加入两个mongo与spring集成的包,spring-data-commons-1.7.0.RELEASE.jar,spring- ...
- C# 在word文档中复制表格并粘帖到下一页中
C# 在word文档中复制表格并粘帖到下一页中 object oMissing = System.Reflection.Missing.Value; Microsoft.Offi ...
- url 取出文件扩展名
/**url 取出文件扩展名 *///方法一function getExt1($url) { $arr = parse_url($url); $file = basename($arr[' ...
- C++设计模式-参考资料
设计模式实例讲解: http://www.cnblogs.com/jiese/tag/ http://www.cnblogs.com/wanggary/category/294620.html 设计模 ...