解题思路:简单的宽搜,见代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<queue>
  5. using namespace std;
  6. const int maxn = ;
  7. int S, n, m, cap[], vis[maxn][maxn];
  8.  
  9. struct node{
  10. int v[];//每个子装的水
  11. int cnt; //倒水的次数
  12. bool friend operator < (node A, node B){
  13. return A.cnt > B.cnt; //cnt越小,优先级越高
  14. }
  15. }s, e;
  16.  
  17. priority_queue<node> q; //优先队列
  18.  
  19. int bfs()
  20. {
  21. while(!q.empty()) q.pop();
  22. q.push(s);
  23.  
  24. while(!q.empty())
  25. {
  26. s = q.top(); q.pop();
  27. // printf("s.cnt = %d\n", s.cnt); //太大意,因为这行没注释,WA了一发
  28.  
  29. //n杯子和s杯子各有一半可乐时返回倒水次数
  30. if(s.v[] == S / && s.v[] == S / ) return s.cnt;
  31.  
  32. //i杯子往j杯子里面倒水
  33. for(int i = ; i < ; i++)
  34. for(int j = ; j < ; j++)
  35. {
  36. if(i == j) continue; //不能往自己的杯子倒水
  37. //如果i杯子是空的或者j杯子已满,则不用倒水
  38. if(s.v[i] == || s.v[j] == cap[j]) continue;
  39.  
  40. int t = min(s.v[i], cap[j] - s.v[j]); //自己思考这一步
  41. e = s; //这步不能忘了
  42. e.v[i] = s.v[i] - t, e.v[j] = s.v[j] + t, e.cnt = s.cnt + ;
  43. if(!vis[e.v[]][e.v[]]) //没访问过
  44. {
  45. vis[e.v[]][e.v[]] = ; //标记为已经访问
  46. q.push(e);
  47. }
  48. }
  49. }
  50. return -; //若没有符合条件的,则返回-1
  51. }
  52.  
  53. int main()
  54. {
  55. while(~scanf("%d %d %d", &S, &n, &m) && (S || n || m))
  56. {
  57. if(S % ) //s为奇数,则不可能均分
  58. {
  59. printf("NO\n");
  60. continue;
  61. }
  62.  
  63. if(n == m) //n等于m时,直接把一个杯子倒满即可
  64. {
  65. printf("1\n");
  66. continue;
  67. }
  68. int tmp;
  69. //初始化n为更大的杯子
  70. if(m > n) tmp = n, n = m, m = tmp;
  71. memset(vis, , sizeof(vis));
  72.  
  73. cap[] = n, cap[] = m, cap[] = S;
  74. s.v[] = , s.v[] = , s.v[] = S, s.cnt = ;
  75. vis[][] = ;
  76.  
  77. int ans = bfs();
  78.  
  79. if(ans == -) printf("NO\n");
  80. else printf("%d\n", ans);
  81. }
  82. return ;
  83. }

HDU1495 非常可乐的更多相关文章

  1. HDU-1495 非常可乐(BFS)

    广搜的灵活应用题: 非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  2. HDU1495 非常可乐 —— BFS + 模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 非常可乐 Time Limit: 2000/1000 MS (Java/Others)    M ...

  3. HDU-1495 非常可乐 (嵌套结构体-广搜 对比 一般广搜)

    题意 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但 ...

  4. HDU1495 非常可乐(BFS/数论)

    大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但see ...

  5. HDU小小练

    hdu1253胜利大逃亡(bfs) 题意:就是城堡问题,找出可通行路径即可 思路:三维BFS,设定前后上下左右6个方向搜索,注意开始的时候人站的位置可以是墙. hdu1495非常可乐(bfs) 题意: ...

  6. 非常可乐(杭电hdu1495)bfs

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

  7. 非常可乐 HDU1495

    BFS题 一共有六种状态转移 一一枚举就好 设置一个标记数组. 用二重循环可以很清晰的解决代码长的问题 #include<cstdio> #include<cstring> # ...

  8. 【HDU - 1495】非常可乐

    -->非常可乐  Descriptions: 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一 ...

  9. hdoj 1495 非常可乐【bfs隐式图】

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

随机推荐

  1. JavaScript基于对象编程

    js面向对象特征介绍 javascript是一种面向(基于)对象的动态脚本语言,是一种基于对象(Object)和事件驱动(EventDirven)并具有安全性能的脚本语言.它具有面向对象语言所特有的各 ...

  2. js之数组常见的方法

    主要介绍数组的一些常用的方法,方法多了,就容易混淆,结果就是方法用错,甚至不会用: 一.数组的定义: 1.字面量/直接量: var arr = [1, 2, 'js', 'java']; 2.通过内部 ...

  3. js中几个正则表达式相关函数使用时g标志的作用

    首先,javascript中涉及到正则表达式的函数总共有6个,可分为两种: 1.第一种是作为字符串对象的方法,即以 String.fun(); 形式调用,这里包括 split.search.match ...

  4. java中静态代理跟动态代理之间的区别

    文章转载于:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html 在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另 ...

  5. list, set操作

    def union_list(l1, l2): result = [] if not l1: result.extend(l2) return result if not l2: result.ext ...

  6. tcp抓包 Wireshark 使用

    fidder主要是针对http(s)协议进行抓包分析的,所以类似wireshark/tcpdump这种工作在tcp/ip层上的抓包工具不太一样,这种工具一般在chrome/firefox的开发者工具下 ...

  7. Struts2笔记——ONGL表达式语言

    OGNL是ObjectGraphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语言. ----------- ...

  8. linuxlcd驱动程序编写 mini2440(w35)

    先说lcd驱动的框架吧! lcd驱动也有自己的框架,如果没有框架,要我们自己完成所有lcd驱动的代码编写那将是很痛苦的一件事. lcd驱动主要依赖于一个文件,fbmem.c 其实它还依赖几个文件  不 ...

  9. 【查找结构3】平衡二叉查找树 [AVL]

    在上一个专题中,我们在谈论二叉查找树的效率的时候.不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找).如何解决这个问题呢?关键在于如何最大限度的减小树的深度.正是基于这 ...

  10. linux 安装scons

     scons是一个Python写的自动化构建工具,需要安装python和scons后才能运行,能够跨平台.其集成功能类似于autoconf/automake ,是一个简洁可靠的工具.现在很多系统都自带 ...