题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495

题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。如果能将可乐平分则输出倒可乐的最少的次数,如果不能输出"NO"。

解题思路:题意很坑看了半天,就是要有两个杯子里的可乐都为S/2,S为奇数肯定不能平分的,接下来就模拟倒水(有六个选择)进行BFS,然后用数组记录各杯子里水的量作为状态。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<queue>
  4. using namespace std;
  5. const int N=;
  6. int A,B,C,ans;
  7. int vis[N][N][N];
  8.  
  9. struct node{
  10. int a,b,c,step;
  11. }pre,now;
  12.  
  13. bool bfs(){
  14. queue<node>q;
  15. now.a=A;
  16. now.b=;
  17. now.c=;
  18. now.step=;
  19. vis[A][][]=;
  20. q.push(now);
  21. while(!q.empty()){
  22. pre=q.front();
  23. q.pop();
  24. for(int i=;i<=;i++){
  25. int a,b,c;
  26. a=pre.a;
  27. b=pre.b;
  28. c=pre.c;
  29. if(i==){
  30. if(a>B-b){
  31. a-=(B-b);
  32. b=B;
  33. }
  34. else{
  35. b+=a;
  36. a=;
  37. }
  38. }
  39. if(i==){
  40. a+=b;
  41. b=;
  42. }
  43. if(i==){
  44. if(b>C-c){
  45. b-=(C-c);
  46. c=C;
  47. }
  48. else{
  49. c+=b;
  50. b=;
  51. }
  52. }
  53. if(i==){
  54. if(c>B-b){
  55. c-=(B-b);
  56. b=B;
  57. }
  58. else{
  59. b+=c;
  60. c=;
  61. }
  62. }
  63. if(i==){
  64. if(a>C-c){
  65. a-=(C-c);
  66. c=C;
  67. }
  68. else{
  69. c+=a;
  70. a=;
  71. }
  72. }
  73. if(i==){
  74. a+=c;
  75. c=;
  76. }
  77. if(vis[a][b][c])
  78. continue;
  79. if(b==a&&b==A/||a==c&&a==A/){
  80. ans=pre.step+;
  81. return true;
  82. }
  83. vis[a][b][c]=;
  84. now.a=a;
  85. now.b=b;
  86. now.c=c;
  87. now.step=pre.step+;
  88. q.push(now);
  89. }
  90. }
  91. return false;
  92. }
  93.  
  94. int main(){
  95. while(~scanf("%d%d%d",&A,&B,&C)){
  96. memset(vis,,sizeof(vis));
  97. ans=;
  98. if(A==&&B==&&C==)
  99. break;
  100. if(A&)
  101. puts("NO");
  102. else if(bfs())
  103. printf("%d\n",ans);
  104. else
  105. puts("NO");
  106. }
  107. return ;
  108. }

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

    题目大意:中文题不说了. 题目思路:我有同学用GCD数论写出来的代码很简洁,但是很抱歉,数论蒟蒻,我觉得比赛的时候我没办法推出.如果用BFS的话思路很简单的,就是6方向广搜,只不过稍微麻烦点.具体看代 ...

  6. HDU - 1495 非常可乐 bfs互倒三杯水

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. BFS(倒水问题) HDU 1495 非常可乐

    题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...

  8. HDU 1495 非常可乐【BFS/倒水问题】

    非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  9. HDU 1495 非常可乐(数论,BFS)

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

随机推荐

  1. java 调用 keytool 生成keystore 和 cer 证书

    keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据:密钥实体(K ...

  2. 【CF438E】The Child and Binary Tree(多项式运算,生成函数)

    [CF438E]The Child and Binary Tree(多项式运算,生成函数) 题面 有一个大小为\(n\)的集合\(S\) 问所有点权都在集合中,并且点权之和分别为\([0,m]\)的二 ...

  3. Codeforces Round #406 (Div. 2)滚粗记

    A 一看到题,不是一道解不定方程的裸题吗,调了好久exgcd. 其实一个for就好了啊 B 一直WA ON TEST 7真是烦,一想会不会是编号太大了,又写了一个map版本,无用. 调了好久好久才发现 ...

  4. 《Linux内核设计与实现》读书笔记——第一二章

    <Linux内核设计与实现>读书笔记——第一二章 第一章 Linux内核简介 1.1 Unix的历史 简洁:仅提供系统调用并有一个非常明确的设计目的. 抽象:Unix中绝大部分东西都被当做 ...

  5. PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】

    一:Mcrypt简介 Mcrypt是PHP的一个扩展,完成了常用加密算法的封装.其实该扩展是对mcrypt标准类库的封装,mcrypt完成了相当多的常用加密算法,如DES, TripleDES, Bl ...

  6. Codeforces Round #407 (Div. 2)A B C 水 暴力 最大子序列和

    A. Anastasia and pebbles time limit per test 1 second memory limit per test 256 megabytes input stan ...

  7. CSS文字溢出部分自动用"..."代替

    CSS文字溢出部分自动用"..."代替 如html部分: <h4><马尔代夫双鱼岛Olhuveli4 晚6 日自助游></h4> <p&g ...

  8. HDU 1299 基础数论 分解

    给一个数n问有多少种x,y的组合使$\frac{1}{x}+\frac{1}{y}=\frac{1}{n},x<=y$满足,设y = k + n,代入得到$x = \frac{n^2}{k} + ...

  9. jQuery各版本CDN

    jquery-2.1.1 注:jquery-2.0以上版本不再支持IE 6/7/8)百度引用地址 (推荐目前最稳定的,不会出现延时打不开情况) 百度压缩版引用地址:<script src=”ht ...

  10. 【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元

    [题意]给定n个点m条边的无向连通图,每条路径的代价是其编号大小,每个点等概率往周围走,要求给所有边编号,使得从1到n的期望总分最小(求该总分).n<=500. [算法]期望+高斯消元 [题解] ...