题目大意:中文题不说了。

题目思路:我有同学用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的更多相关文章

  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搜索

    题意:有个为三个杯子(杯子没有刻度),体积为s,n,m,s=m+n, 刚开始只有体积为s的杯子装满可乐,可以互相倒,问你最少的次数使可乐均分,如果没有结果,输出-1; 分析:直接互相倒就完了,BFS模 ...

  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. 部署WEB应用的三种方式[转]

    一.基本部署 Tomcat安装目录下有一个webapps目录,该目录存放所有的WEB应用程序,Tomcat会自动管理该目录下的所有WEB应用.因此,最简单的部署方式就是将要部署的WEB应用直接拷贝到T ...

  2. 关于Unity项目中创建项目遇到的一些问题

    1.Unity调用Android的方法默认不是在UI线程执行,所以在Android上写一些页面的重绘的方法,让Unity去调用时,注意要在Android中添加对应的runOnUiThread才可以: ...

  3. 5、Spring+Struts2+MyBatis+分页(mybatis无代理)增删改查

    1.创建如下项目结构 2.在src下的com.entity包下创建Dept.java package com.entity; /** * 部门表 * @author Holly老师 * */ publ ...

  4. osgOcean测试

    #include <osgViewer/Viewer> #include <osgDB/ReadFile> #include <osgGA/TrackballManipu ...

  5. Delphi用ADOquery主从表例子(转)

    http://blog.csdn.net/kandy_zheng/article/details/1639184 在sql server 的northwide 中建立主表 create table s ...

  6. LeetCode OJ 34. Search for a Range

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  7. MFC HTTP

    CInternetSession m_winet(NULL,,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,); CHttpConnection *pConnection; ...

  8. Openjudge-计算概论(A)-取石子游戏

    描述: 有两堆石子,两个人轮流去取.每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍.最后谁能够把一堆石子取空谁就算赢. 比如初始的时候两堆石子的数目是25和7 2 ...

  9. Webdriver控制翻页控件,并实现向前向后翻页功能,附上代码,仅供参考,其他类似日期控件的功能可以自己封装

    新增输入与选择页面的html源码: <div style="margin-top:-60px;" class="modal-content" id=&qu ...

  10. scala map

    map 返回元组 下面是如果不存在key 报错 a.(2) 下面两种方式 不同的写法. 如果存在 Some(2) 不存在 None a get 2 a.get(2) getOrElse 如果不存在 回 ...