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) ...
随机推荐
- 设计新Xlator扩展GlusterFS[转]
原文:http://www.linuxidc.com/Linux/2013-08/89105.htm 1. GlusterFS概述 GlusterFS是一个开源的分布式文件系统,具有强大的Scale- ...
- Class.forName()
主要功能 Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就是说JVM会执行该类的静态代码段 ...
- csu oj Infected Computer 1427
#include <iostream> #include <algorithm> #include <stdio.h> #define max 20005 #def ...
- openwrt拦截snmp报文
SNMP使用的协议为UDP,默认端口为161和162. 使用iptables 命令如下: iptables -A INPUT -p udp -m udp --dport 161:162 -j DROP ...
- apicloud
<!doctype html> <html class="no-js"> <head> <meta charset="utf-8 ...
- NOIP2001-普及组复赛-第一题-数的计算
题目描述 Description 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理; 2.在 ...
- Ubuntu14.04下手动建立快捷方式
先在桌面创建一个文件:文件内容如下 [Desktop Entry]Encoding=UTF-8Name=eclipseComment=eclipse ideExec=/home/mars/eclips ...
- ural 1118. Nontrivial Numbers
1118. Nontrivial Numbers Time limit: 2.0 secondMemory limit: 64 MB Specialists of SKB Kontur have de ...
- text绑定(The "text" binding)
目的 text绑定可以使你传递的参数做为文本显示到相关的DOM元素里. 一般会用在如<span>或者<em>这类元素来显示文本,但从技术来讲它可以绑定到任何元素. 示例 Tod ...
- 管理MySQL的命令
USE 数据库名 :选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库. SHOW DATABASES: 列出 MySQL 数据库管理系统的数据库列表. SHOW TABLE ...